2018-06-06 课后笔记

课前预习内容

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特有的语法,表示所有的行都已经执行,

转载于:https://my.oschina.net/u/3851487/blog/1824846

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值