课前预习内容
9.1 正则介绍_grep上
9.2 grep中
9.3 grep下
9.4/9.5 sed
9.6/9.7 awk
9.1 正则介绍_grep上 中 下
grep工具是过滤某个关键词,命令的格式为:grep 【-cvinABC】‘word’filename。
在centos7中,grep默认帮我们把匹配到的字符串标注了红色,我们可以用which grep,会发现grep其实是grep --color=auto,这个选项就是颜色显示
[root@localhost grep]# which grep alias grep='grep --color=auto' /usr/bin/grep
- -c:表示打印符合要求的行数
[root@localhost ~]# mkdir grep [root@localhost ~]# cd grep [root@localhost grep]# touch test.txt [root@localhost grep]# ls test.txt [root@localhost grep]# cp /etc/passwd test.txt cp:是否覆盖"test.txt"? y [root@localhost grep]# ls test.txt [root@localhost grep]# cat test.txt 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin [root@localhost grep]# grep -c 'root' test.txt 2 [root@localhost grep]# grep -c 'nologin' test.txt 17
- -i:表示忽略大小写
[root@localhost grep]# grep -i 'root' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER operator:x:11:0:operator:/root:/sbin/nologin
- -n:表示打印符合要求的行以及行号
[root@localhost grep]# grep -in 'root' test.txt 1:root:x:0:0:root:/root:/bin/bash 2:ROOT:Root:323:ererER 11:operator:x:11:0:operator:/root:/sbin/nologin
- -v:表示打印不符合要求的行(也就是把我们定义的字符以外的都列出来)
[root@localhost grep]# grep -inv 'root' test.txt 3:bin:x:1:1:bin:/bin:/sbin/nologin 4:daemon:x:2:2:daemon:/sbin:/sbin/nologin 5:adm:x:3:4:adm:/var/adm:/sbin/nologin 6:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 7:sync:x:5:0:sync:/sbin:/bin/sync 8:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 9:halt:x:7:0:halt:/sbin:/sbin/halt 10:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 12:games:x:12:100:games:/usr/games:/sbin/nologin 13:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 14:nobody:x:99:99:Nobody:/:/sbin/nologin 15:dbus:x:81:81:System message bus:/:/sbin/nologin 16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin 17:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin 18:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin 19:postfix:x:89:89::/var/spool/postfix:/sbin/nologin 20:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 21:ntp:x:38:38::/etc/ntp:/sbin/nologin 22:nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
- -A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面二行
[root@localhost grep]# grep -nA2 'root' test.txt 1:root:x:0:0:root:/root:/bin/bash 2-ROOT:Root:323:ererER 3-bin:x:1:1:bin:/bin:/sbin/nologin -- 11:operator:x:11:0:operator:/root:/sbin/nologin 12-games:x:12:100:games:/usr/games:/sbin/nologin 13-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- -B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面二行
[root@localhost grep]# grep -nB2 'root' test.txt 1:root:x:0:0:root:/root:/bin/bash -- 9-halt:x:7:0:halt:/sbin:/sbin/halt 10-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11:operator:x:11:0:operator:/root:/sbin/nologin
注释说明:这里只显示第1行root,因为第一行上面没有行,所以才显示一行
- -C: 后面跟一个数字,例如-C2表示打印符合要求的行以及上下二行
[root@localhost grep]# grep -nC2 'root' test.txt 1:root:x:0:0:root:/root:/bin/bash 2-ROOT:Root:323:ererER 3-bin:x:1:1:bin:/bin:/sbin/nologin -- 9-halt:x:7:0:halt:/sbin:/sbin/halt 10-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 11:operator:x:11:0:operator:/root:/sbin/nologin 12-games:x:12:100:games:/usr/games:/sbin/nologin 13-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- 过滤出所有包含数字的行
[root@localhost grep]# grep '[0-9]' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
- 过滤出所有以#号开头的行
[root@localhost grep]# grep '^#' test.txt #ROOT:Root:323:ererER #bin:x:1:1:bin:/bin:/sbin/nologin #daemon:x:2:2:daemon:/sbin:/sbin/nologin #32432:eadasd:
[root@localhost grep]# grep -n '^[^a-zA-Z]' test.txt 2:#ROOT:Root:323:ererER 3:#bin:x:1:1:bin:/bin:/sbin/nologin 4:#daemon:x:2:2:daemon:/sbin:/sbin/nologin 5:#32432:eadasd:
注释说明:^是以什么什么开头,放在[]里面表示非的意思
- 我们编辑一下test。txt文件,在里面加入几行空行,怎么才能把空行列出来呢
[root@localhost grep]# grep -n '^$' test.txt 6: 7: 8: 10: 11: 12: [root@localhost grep]# vim test.txt 1 root:x:0:0:root:/root:/bin/bash 2 #ROOT:Root:323:ererER 3 #bin:x:1:1:bin:/bin:/sbin/nologin 4 #daemon:x:2:2:daemon:/sbin:/sbin/nologin 5 #32432:eadasd: 6 7 8 9 adm:x:3:4:adm:/var/adm:/sbin/nologin 10 11 12 13 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 14 sync:x:5:0:sync:/sbin:/bin/sync 15 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 16 halt:x:7:0:halt:/sbin:/sbin/halt 17 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 18 operator:x:11:0:operator:/root:/sbin/nologin 19 games:x:12:100:games:/usr/games:/sbin/nologin 20 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 21 nobody:x:99:99:Nobody:/:/sbin/nologin :set nu 13,1
在正则表达式中^表示行的开始,$表示行的结尾,所以空行就用^$表示
- 过滤出任意一个字符和重复字符
[root@localhost grep]# vim test.txt [root@localhost grep]# grep 'r.o' test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
.表示任意字符。上例子中,r.o表示把r与o之间有一个任意字符的行过滤出来 [root@localhost grep]# grep 'ooo*' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER roooooot:ewew:rooot:roooot lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
*表示零个或者多个*前面的字符。上例中,ooo*表示oo、ooo、ooooo、或者很多的o [root@localhost grep]# grep '.*' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd: roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
上面的例子中,.*表示零个或者多个任意字符,空行也包含在内,他会把所有的行都能匹配到
- 指定要过滤的的字符出现的次数
[root@localhost grep]# grep 'o\{2\}' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER roooooot:ewew:rooot:roooot lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
上面的例子中,表示出现2次o的都过滤出来,我们用到了{}字符,其内部为数字,表示数字前面的字符要重复的次数,{}左右都需要加上转义字符\,另外使用{}还可以表示一个范围,{n1,n2},其中n1<n2,表示重复n1到n2次前面的字符。n2还可以为空,这时表示大于等于n次。
其实上面的例子我们还可以不用转义字符\,也能起到同样的效果,就是使用egrep。
[root@localhost grep]# egrep 'o{2}' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER roooooot:ewew:rooot:roooot lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
egrep是grep的拓展版本,介绍egrep的用法
- 过滤出一个或多个指定的字符
[root@localhost grep]# egrep 'o+' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin roooooot:ewew:rooot:roooot adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@localhost grep]# head -5 test.txt|egrep 'oo+' root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER
[root@localhost grep]# head -10 test.txt|egrep 'ooo+' roooooot:ewew:rooot:roooot
- 过滤出零个或一个指定的字符
[root@localhost grep]# egrep 'o?' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd: roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@localhost grep]# egrep 'ooo?' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER roooooot:ewew:rooot:roooot lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@localhost grep]# egrep 'oooo?' test.txt roooooot:ewew:rooot:roooot
- 过滤出字符串1或者字符串2,使用|
[root@localhost grep]# egrep 'oo|bin|nologin' test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
|表示或者的意思
总结:使用egrep时,需要配合特殊符号去使用例如:+ ? {} ()^ $
9.4/9.5 sed
grep工具的功能还不够强大,它实现的只是查找功能,而不能把查找的内容替换。sed工具可以替换文本。
- 打印某行
sed的命令格式为sed -n ‘n’p filename,单引号内的n是一个数字,表示第几行。-n选项的作用是只显示我们要打印的行,无关的内容不显示
[root@localhost grep]# sed -n '2'p test.txt ROOT:Root:323:ererER
我们也可以把所有行都打印出来,可以使用命令sed -n ‘1,$'p filename
[root@localhost grep]# sed -n '1,$'p test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd: roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
这里的$表示尾行的意思 我们还可以指定一个区间打印,比如2行到5行
[root@localhost grep]# sed -n '2,5'p test.txt ROOT:Root:323:ererER bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd:
- 打印包含某个字符串的行
[root@localhost grep]# sed -n '/root/'p test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@localhost grep]# sed -n '/root/'p test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
我们想要不区分大小写,可以加上大写的字母I 表示
[root@localhost grep]# sed -n '/root/'Ip test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER operator:x:11:0:operator:/root:/sbin/nologin
sed的用法跟grep用法类似,也可以使用特殊符号,这里需要加上选项-r,如果不加是打印不出来的
[root@localhost grep]# sed -nr '/o+t/'p test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER roooooot:ewew:rooot:roooot operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost grep]# sed -nr '/o{2}/'p test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER roooooot:ewew:rooot:roooot lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@localhost grep]# sed -n '/^r/'p test.txt root:x:0:0:root:/root:/bin/bash roooooot:ewew:rooot:roooot
[root@localhost grep]# sed -n '/in$/'p test.txt 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 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@localhost grep]# sed -n '/r..o/'p test.txt roooooot:ewew:rooot:roooot operator:x:11:0:operator:/root:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin [root@localhost grep]#
[root@localhost grep]# sed -n '/ooo*/'p test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER roooooot:ewew:rooot:roooot lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sed命令加上-e选项,可以实现多个行为
[root@localhost grep]# sed -e '/root/'p -e '/adm/'p -n test.txt root:x:0:0:root:/root:/bin/bash adm:x:3:4:adm:/var/adm:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
- 删除某个行
使用选项d,这里单引号的数字表示第几行,我们在使用d选项时,并没有对我们文件本身操作去删除,如果想要彻底删除某一行,需要加上-i选项
[root@localhost grep]# sed '1'd test.txt ROOT:Root:323:ererER bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd: roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin [root@localhost grep]# cat test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER
[root@localhost grep]# sed '1,2'd test.txt bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd: roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
我们也可以删除匹配某个字符的行
[root@localhost grep]# sed '/32432/'d test.txt root:x:0:0:root:/root:/bin/bash ROOT:Root:323:ererER bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin [root@localhost grep]#
- 替换字符或者字符串,命令如下
[root@localhost grep]# sed '1,2s/roo/oor/g' test.txt oort:x:0:0:oort:/oort:/bin/bash oort:oort:qwe bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd: roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
上面的例子中,我们除了可以使用/作为分隔符号,我们还可以使用其他的#@作为分隔符号
这里的数字1,2表示第一二行,s表示替换的工作,参数g表示全局替换,如果不加g则只替换本行出现的第几个
- 删除文档中所有的字母或者数字
[root@localhost grep]# sed 's/[0-9]//g' test.txt root:x:::root:/root:/bin/bash root:root:qwe bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin:/sbin/nologin :eadasd: roooooot:ewew:rooot:roooot adm:x:::adm:/var/adm:/sbin/nologin lp:x:::lp:/var/spool/lpd:/sbin/nologin sync:x:::sync:/sbin:/bin/sync shutdown:x:::shutdown:/sbin:/sbin/shutdown halt:x:::halt:/sbin:/sbin/halt mail:x:::mail:/var/spool/mail:/sbin/nologin operator:x:::operator:/root:/sbin/nologin games:x:::games:/usr/games:/sbin/nologin ftp:x:::FTP User:/var/ftp:/sbin/nologin nobody:x:::Nobody:/:/sbin/nologin dbus:x:::System message bus:/:/sbin/nologin polkitd:x:::User for polkitd:/:/sbin/nologin avahi:x:::Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:::Avahi IPvLL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x::::/var/spool/postfix:/sbin/nologin sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x::::/etc/ntp:/sbin/nologin nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
[root@localhost grep]# sed 's/[a-zA-Z]//g' test.txt ::0:0::/:// :: ::1:1::/:// ::2:2::/:// 32432:: ::: ::3:4:://:// ::4:7::///:// ::5:0::/:// ::6:0::/:// ::7:0::/:// ::8:12::///:// ::11:0::/:// ::12:100:://:// ::14:50: ://:// ::99:99::/:// ::81:81: :/:// ::999:998: :/:// ::70:70: /- :///-:// -::170:170: 4 :///-:// ::89:89::///:// ::74:74:- :///:// ::38:38:://:// ::998:997: :///://
- 调换二个字符串的位置
[root@localhost grep]# sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/' test.txt bash:x:0:0:root:/root:/bin/root root:root:qwe bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd: roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
小括号在sed中属于特殊特殊符号,必须在前面加转义字符\,替换时则写成类似\1 \2 \3的形式,上例中()把想要替换的字符打包成一个整体。有这个转义字符\,会让这个表达式有点乱,可以简单写法。 [root@localhost grep]# sed -r 's/(bash)(.*)(root)/\3\2\1/' test.txt root:x:0:0:root:/root:/bin/bash root:root:qwe bin:x:1:1:bin:/bin:/sbin/nologin
- 在某一行前后增加指定内容
[root@localhost grep]# sed 's/^.*$/123&/' test.txt 123root:x:0:0:root:/root:/bin/bash 123root:root:qwe 123bin:x:1:1:bin:/bin:/sbin/nologin 123daemon:x:2:2:daemon:/sbin:/sbin/nologin 12332432:eadasd: 123roooooot:ewew:rooot:roooot 123adm:x:3:4:adm:/var/adm:/sbin/nologin 123lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 123sync:x:5:0:sync:/sbin:/bin/sync 123shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 123halt:x:7:0:halt:/sbin:/sbin/halt 123mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 123operator:x:11:0:operator:/root:/sbin/nologin 123games:x:12:100:games:/usr/games:/sbin/nologin 123ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 123nobody:x:99:99:Nobody:/:/sbin/nologin 123dbus:x:81:81:System message bus:/:/sbin/nologin 123polkitd:x:999:998:User for polkitd:/:/sbin/nologin 123avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin 123avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin 123postfix:x:89:89::/var/spool/postfix:/sbin/nologin 123sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 123ntp:x:38:38::/etc/ntp:/sbin/nologin 123nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@localhost grep]# sed -r 's/(.*)/aaa&/' test.txt aaaroot:x:0:0:root:/root:/bin/bash aaaroot:root:qwe aaabin:x:1:1:bin:/bin:/sbin/nologin aaadaemon:x:2:2:daemon:/sbin:/sbin/nologin aaa32432:eadasd: aaaroooooot:ewew:rooot:roooot aaaadm:x:3:4:adm:/var/adm:/sbin/nologin aaalp:x:4:7:lp:/var/spool/lpd:/sbin/nologin aaasync:x:5:0:sync:/sbin:/bin/sync aaashutdown:x:6:0:shutdown:/sbin:/sbin/shutdown aaahalt:x:7:0:halt:/sbin:/sbin/halt aaamail:x:8:12:mail:/var/spool/mail:/sbin/nologin aaaoperator:x:11:0:operator:/root:/sbin/nologin aaagames:x:12:100:games:/usr/games:/sbin/nologin aaaftp:x:14:50:FTP User:/var/ftp:/sbin/nologin aaanobody:x:99:99:Nobody:/:/sbin/nologin aaadbus:x:81:81:System message bus:/:/sbin/nologin aaapolkitd:x:999:998:User for polkitd:/:/sbin/nologin aaaavahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin aaaavahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin aaapostfix:x:89:89::/var/spool/postfix:/sbin/nologin aaasshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin aaantp:x:38:38::/etc/ntp:/sbin/nologin aaanginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
9.6/9.7 awk
awk也是流式编辑器,针对文档中的行来操作,一行一行的去执行,awk兼容sed的所有功能,而且非常强大。
- 截取文档中的某个段
[root@localhost grep]# head -n2 test.txt|awk -F ':' '{print $1}' root root
上例中,-F表示指定分隔符,如果不加-F选项,则以空格或者tab分分隔符。print为打印的动作,用来打印某一段。$1为第一段,$2为第二段,但是$0表示整行
[root@localhost grep]# head -n2 test.txt|awk -F ':' '{print $0}' root:x:0:0:root:/root:/bin/bash root:root:qwe
print还可以打印自定义的内容,但是自定义的内容需要双引号括起来
[root@localhost grep]# head -n2 test.txt|awk -F ':' '{print $1"#"$2"#"$3"#"}' root#x#0# root#root#qwe#
- 匹配字符串或者字符
[root@localhost grep]# awk '/oo/' test.txt root:x:0:0:root:/root:/bin/bash root:root:qwe roooooot:ewew:rooot:roooot lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
- 可以让某个段去匹配用~号表示,这里的~表示匹配的意思
[root@localhost grep]# awk -F ':' '$1 ~/oo/' test.txt root:x:0:0:root:/root:/bin/bash root:root:qwe roooooot:ewew:rooot:roooot
- awk还以使用多次匹配
[root@localhost grep]# awk -F ':' '/root/ {print $1,$2} /nologin/ {print $2,$9}' test.txt root x root root x x x x x operator x x x x x x x x x x x x x
- 条件操作符
[root@localhost grep]# awk -F ':' '$3=="0"' test.txt root:x:0:0:root:/root:/bin/bash
awk中可以用逻辑符号进行判断,比如==就是等于,也可以理解为精准匹配。还有> >= < <= !=等。注意的是,在和数字比较时,若把数字用双引号引起来,那么awk不会认为是数字,而会认为是字符,不加双引号则会认为是数字。举例说明
[root@localhost grep]# awk -F ':' '$3>="500"' test.txt root:root:qwe roooooot:ewew:rooot:roooot 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 nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@localhost grep]# awk -F ':' '$3>=500' test.txt root:root:qwe roooooot:ewew:rooot:roooot polkitd:x:999:998:User for polkitd:/:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin [root@localhost grep]#
第一个例子,没有得到我们想要的结果,而第二个才是我们想要的结果,这就是数字加不加双引号的区别
- 使用!=表示不匹配。
[root@localhost grep]# awk -F ':' '$7!="/sbin/nologin"' test.txt root:x:0:0:root:/root:/bin/bash root:root:qwe 32432:eadasd: roooooot:ewew:rooot:roooot sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
我们还可以在二个段之间进行比较
[root@localhost grep]# awk -F ':' '$3<$4' test.txt adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
另外还可以使用&& || ,他们分别表示并且和或者。&&的用法
[root@localhost grep]# awk -F ':' '$3<"4" && $5>"5"' test.txt 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 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 avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
||的使用
[root@localhost grep]# awk -F ':' '$3>500 || $1=="root"' test.txt root:x:0:0:root:/root:/bin/bash root:root:qwe roooooot:ewew:rooot:roooot polkitd:x:999:998:User for polkitd:/:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
- awk的内置变量
awk的内置变量有OFS NF NR OFS和-F选项有类似的功能,也就是定义分隔符,但是它是在输出的时候定义,NF表示用分隔符分隔后一共有多少段,NR表示行号
[root@localhost grep]# head -n5 test.txt|awk -F ':' '{OFS="#"} {print $1,$3,$4}' root#0#0 root#qwe# bin#1#1 daemon#2#2 32432##
还有高级的用法,if
[root@localhost grep]# awk -F ':' '{OFS="#"} {if ($3>30) {print $1,$3,$4}}' test.txt root#qwe# roooooot#rooot#roooot nobody#99#99 dbus#81#81 polkitd#999#998 avahi#70#70 avahi-autoipd#170#170 postfix#89#89 sshd#74#74 ntp#38#38 nginx#998#997
变量NF的用法
[root@localhost grep]# head -n5 test.txt|awk -F ':' '{print NF}' 7 3 7 7 3
[root@localhost grep]# head -n5 test.txt|awk -F ':' '{print $NF}' /bin/bash qwe /sbin/nologin /sbin/nologin
这里的NF是多少段,$NF是最后一段的值,变量NR的具体用法
[root@localhost grep]# head -n5 test.txt|awk -F ':' '{print NR}' 1 2 3 4 5
我们还可以使用NR作为判断条件
[root@localhost grep]# awk 'NR>1' test.txt root:root:qwe bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 32432:eadasd: roooooot:ewew:rooot:roooot 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 dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nginx:x:998:997:Nginx web server:/var/lib/nginx:/sbin/nologin
- awk中数学运算、
- awk可以更改段值
[root@localhost grep]# head -n3 test.txt|awk -F ':' '$1="root"' root x 0 0 root /root /bin/bash root root qwe root x 1 1 bin /bin /sbin/nologin
awk也可以对各个段进行数学运算
[root@localhost grep]# head -n3 test.txt|awk -F ':' '{$7=$3+$4; print $0}' root x 0 0 root /root 0 root root qwe 0 bin x 1 1 bin /bin 2
awk还可以计算某个段的总和
[root@localhost grep]# awk -F ':' '{(tot=tot+$3)}; END{print tot}' test.txt 2691
这里的END是awk特有的语法,表示所有的行都已经执行,