第十一章 常用文字字符串处理命令
Posted jhno1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十一章 常用文字字符串处理命令相关的知识,希望对你有一定的参考价值。
一、sort #排序 将不相同的行进行排序在一起 默认是根据第一列进行排序 默认是以空白字符为分割符
#默认以字母进行排序
选项:
-k #指定哪一列为分隔符
-n #以数值大小的方式进行排序
-r #倒叙排序
-t #指定分割符
cat>sort.txt<<EOF
b 5
c 3
a 11
f 2
d 9
EOF
[root@jindada ~]# cat sort.txt
b 5
c 3
a 11
f 2
d 9
[root@jindada ~]# sort sort.txt
a 11
b 5
c 3
d 9
f 2
[root@jindada ~]# sort -k2 sort.txt
a 11
f 2
c 3
b 5
d 9
[root@jindada ~]# sort -nk2 sort.txt
f 2
c 3
b 5
d 9
a 11
[root@jindada ~]# sort -rnk2 sort.txt
a 11
d 9
b 5
c 3
f 2
[root@jindada ~]# cp /etc/passwd ./
[root@jindada ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@jindada ~]# sort -t ":" -nk3 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
cat>file.txt<<EOF
123
abc
123
edf
456
123
abc
EOF
[root@jindada ~]# cat file.txt
123
abc
123
edf
456
123
abc
[root@jindada ~]# sort file.txt
123
123
123
456
abc
abc
edf
二、uniq #去重 去除重复的行 只能去除相同相邻的行 统计 将重复的行的次数统计出来 跟sort结合使用
| #管道 将前面命令的执行结果交给后面的命令继续执行 操作的是数据
选项:
-c #统计重复的行的次数
[root@jindada ~]# sort file.txt
123
123
123
456
abc
abc
edf
[root@jindada ~]# sort file.txt | uniq
123
456
abc
edf
[root@jindada ~]# sort file.txt | uniq -c
3 123
1 456
2 abc
1 edf
[root@jindada ~]# sort file.txt | uniq -c | sort
1 456
1 edf
2 abc
3 123
[root@jindada ~]# sort file.txt | uniq -c | sort -n
1 456
1 edf
2 abc
3 123
[root@jindada ~]# sort file.txt | uniq -c | sort -rn
3 123
2 abc
1 edf
1 456
三、cut #取列 awk命令的小弟 默认的分隔符为tab键
选项:
-d #指定分隔符
-f #取出指定的列
-c #取出指定的字符 按照行进行处理的
[root@jindada ~]# echo "root:x:0:0:root:/root:/bin/bash" >test.txt
[root@jindada ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
#取出第七列
[root@jindada ~]# cut -d ":" -f7 test.txt
/bin/bash
#取出第一列和第七列
[root@jindada ~]# cut -d ":" -f1,7 test.txt
root:/bin/bash
#取出第五列到第七列
[root@jindada ~]# cut -d ":" -f5-7 test.txt
root:/root:/bin/bash
[root@jindada ~]# cut -d ":" -f7 passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
[root@jindada ~]# cut -d ":" -f7 passwd | sort
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/shutdown
[root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown
[root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c
1 /bin/bash
1 /bin/sync
1 /sbin/halt
14 /sbin/nologin
1 /sbin/shutdown
[root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -n
1 /bin/bash
1 /bin/sync
1 /sbin/halt
1 /sbin/shutdown
14 /sbin/nologin
[root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -rn
14 /sbin/nologin
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
1 /bin/bash
[root@jindada ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
[root@jindada ~]# cut -c 6 test.txt
x
[root@jindada ~]# cut -c 6 passwd
x
:
n
:
4
x
o
x
x
t
#取出不同的字符
[root@jindada ~]# cut -c 6,8 test.txt
x0
#取出连续的字符
[root@jindada ~]# cut -c 1-4 test.txt
root
#取出系统eth0的IP地址
[root@jindada ~]# yum install -y net-tools
[root@jindada ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 1634 bytes 464970 (454.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1033 bytes 114568 (111.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@jindada ~]# ifconfig eth0 | head -2
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@jindada ~]# ifconfig eth0 | head -2 | tail -1
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@jindada ~]# ifconfig eth0 | head -2 | tail -1 | cut -d " " -f10
10.0.0.100
[root@jindada ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@jindada ~]# ip a s eth0 | head -3
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -c 10-19
10.0.0.100
[root@jindada ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -d " " -f6
10.0.0.100/24
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -d " " -f6 | cut -d "/" -f1
10.0.0.100
四、tr #替换 删除 sed的小弟 只能单对单的替换
选项:
-d #删除指定的字符
语法:
tr old new < file
< #标准输入重定向
[root@jindada ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
[root@jindada ~]# tr "0" "9" < test.txt
root:x:9:9:root:/root:/bin/bash
[root@jindada ~]# tr -d "o" < test.txt
rt:x:0:0:rt:/rt:/bin/bash
[root@jindada ~]#
[root@jindada ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@jindada ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | tr ‘/‘ ‘ ‘
inet 10.0.0.100 24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | tr ‘/‘ ‘ ‘ | cut -d " " -f6
10.0.0.100
五、wc #统计 行数 字节数 列数 行的长度
选项:
-l #统计行数
-w #统计列数,默认以空白字符为分隔符
-c #统计字节数
-L #统计文件中最长的行的长度
[root@jindada ~]# wc passwd
18 26 798 passwd
[root@jindada ~]# wc -l passwd
18 passwd
[root@jindada ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jindada ~]# wc /etc/hosts
2 10 158 /etc/hosts
[root@jindada ~]# wc -w /etc/hosts
10 /etc/hosts
[root@jindada ~]# ll passwd
-rw-r--r--. 1 root root 798 Jul 13 16:49 passwd
[root@jindada ~]# ll /etc/hosts
-rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
[root@jindada ~]# wc -c /etc/hosts
158 /etc/hosts
[root@jindada ~]# wc -c passwd
798 passwd
[root@jindada ~]#
[root@jindada ~]# wc -L passwd
68 passwd
[root@jindada ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jindada ~]# wc -L /etc/hosts
78 /etc/hosts
[root@jindada ~]# name=ewuighrtuighwiorteugh
[root@jindada ~]# echo $name
ewuighrtuighwiorteugh
[root@jindada ~]# echo $name | wc -L
21
以上是关于第十一章 常用文字字符串处理命令的主要内容,如果未能解决你的问题,请参考以下文章
《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 2