文本编辑三剑客
文章目录
- 文本编辑三剑客
- 一、正则表达式
- 1.基本正则表达式元字符
- 2.拓展正则表达式元字符
- 二、grep
- 1.grep
- 2.egrep
- 3.fgrep
- 三、sed
- 四、awk
一、正则表达式
1、简介:正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
2、工具
被vim、sed、awk、grep 调用
例子1
[root@nfs test]# vim test24.sh
[root@nfs test]# bash test24.sh
请输入待创建的用户数量:2
[root@nfs test]# tail -n 2 /etc/passwd
user1:x:1027:1027::/home/user1:/bin/bash
user2:x:1028:1028::/home/user2:/bin/bash
[root@nfs test]# cat test24.sh
#!/bin/bash
read -p "请输入待创建的用户数量:" num
if [[ ! $num =~ ^[0-9]+$ ]];then
echo "你输入的数量有误,请输入正确的数字,谢谢"
exit
fi
for i in `seq $num`
do
useradd user$i
done
1.基本正则表达式元字符
^ | 行首定位符 |
[root@nfs test]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
apache:x:48:48:Apache:/opt/rh/httpd24/root/usr/share/httpd:/sbin/nologin
[root@nfs test]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ | 行尾定位符 |
[root@nfs test]# vim test.txt
[root@nfs test]# grep guan test.txt
guan abc efg
hij guan kln
opq dgdg guan
[root@nfs test]# grep guan$ test.txt
opq dgdg guan
[root@nfs test]#
. | 匹配任意单个字符 |
[root@nfs test]# grep guan test.txt
guan abc efg
hij guan kln
opq dgdg guan
[root@nfs test]# grep a.c test.txt
guan abc efg
[root@nfs test]# grep d..g test.txt
opq dgdg guan
* | 匹配前导符0到多次 |
[root@nfs test]# vim test.txt
[root@nfs test]# grep abc* test.txt
guan abc efg
ab
abc
abcc
abcdefc
[root@nfs test]# cat test.txt
guan abc efg
hij guan kln
opq dgdg guan
ab
abc
abcc
abcdefc
.* | 任意多个字符 |
[root@nfs test]# wc -l test.txt
7 test.txt
[root@nfs test]# grep ".*" test.txt
guan abc efg
hij guan kln
opq dgdg guan
ab
abc
abcc
abcdefc
[root@nfs test]# vim test.txt
[ ] | 匹配指定范围内的一个字符 |
[root@nfs test]# grep [Ggl]uan test.txt
guan abc efg
hij guan kln
opq dgdg guan
Guan
guan
luan
[-] | 匹配指定范围内的一个字符,连续的范围 |
[root@nfs test]# grep [a-zA-Z0-9]uan test.txt
guan abc efg
hij guan kln
opq dgdg guan
Guan
guan
luan
9uan9uan9uan9uan9uan9uan9uan9uan9uan
[^] | 匹配不在指定组内的字符,即取反 |
[root@nfs test]# grep [a-zA-Z0-9]uan test.txt
guan abc efg
hij guan kln
opq dgdg guan
Guan
guan
luan
9uan9uan9uan9uan9uan9uan9uan9uan9uan
[root@nfs test]# grep [a-zA-Z]uan test.txt
guan abc efg
hij guan kln
opq dgdg guan
Guan
guan
luan
[root@nfs test]# grep [^a-zA-Z]uan test.txt
9uan9uan9uan9uan9uan9uan9uan9uan9uan
\ | 用来转义元字符(’ '、" "、\) |
[root@nfs test]# cat test.txt
guan abc efg
hij guan kln
opq dgdg guan
ab
abc
abcc
abcdefc
Guan
guan
luan
9uan9uan9uan9uan9uan9uan9uan9uan9uan
.uan
[root@nfs test]# grep "\.uan" test.txt
.uan
\< | 词首定位符 |
[root@nfs test]# cat test.txt
guan abc efg
hij guan kln
opq dgdg guan
ab
abc
abcc
abcdefc
Guan
guan
luan
9uan9uan9uan9uan9uan9uan9uan9uan9uan
.uan
[root@nfs test]# grep "\<guan" test.txt
guan abc efg
hij guan kln
opq dgdg guan
guan
[root@nfs test]# grep "^guan" test.txt
guan abc efg
guan
\> | 词尾定位符 |
[root@nfs test]# cat test.txt
guan abc efg
hij guan kln
opq dgdg guan
ab
abc
abcc
abcdefc
Guan
guan
luan
9uan9uan9uan9uan9uan9uan9uan9uan9uan
.uan
[root@nfs test]# grep "guan\>" test.txt
guan abc efg
hij guan kln
opq dgdg guan
guan
( ) | 匹配稍后使用的字符的标签 |
192.168.200.2
192.168.200.184
192.168.200.182
~
~
:% s/192.168.200.2/192.168.200.120/g
:% s/\(192.168.200.\)2/\119/
192.168.200.19
:% s/\(192.168.200.\)2/\1120/
192.168.200.120
将 192.168.200.2 换成 2.200.168.192
:% s/\(192\).\(168\).\(200\).\(2\)/\4.\3.\2.\1/
2.200.168.192
x{m} | 字符x重复出现m次 |
[root@nfs test]# grep "o\{3\}" test.txt
looove
looove
looove
loooove
x{m,} | 字符x重复出现m次以上 |
[root@nfs test]# grep "o\{3,\}" test.txt
looove
looove
looove
loooove
x{m,n} |
[root@nfs test]# grep "o\{3,4\}" test.txt
looove
looove
looove
loooove
2.拓展正则表达式元字符
+ | 匹配1~n个前导字符 |
[root@nfs test]# grep lo*ve test.txt
love
loove
loove
looove
looove
looove
loooove
[root@nfs test]# egrep lo+ve test.txt
love
loove
loove
looove
looove
looove
loooove
? | 匹配n-1~n个前导字符 |
[root@nfs test]# egrep "lo?ve" test.txt
love
[root@nfs test]# egrep "loo?ve" test.txt
love
loove
loove
[root@nfs test]# egrep "looo?ve" test.txt
loove
loove
looove
looove
looove
[root@nfs test]# egrep "loooo?ve" test.txt
looove
looove
looove
loooove
a | b | 匹配a或b |
[root@nfs test]# cat test.txt
love
live
[root@nfs test]# egrep o test.txt
love
[root@nfs test]# egrep i test.txt
live
[root@nfs test]# egrep "o|i" test.txt
love
live
( ) | 组字符 |
[root@nfs test]# egrep "love|es" test.txt
love
es
[root@nfs test]# egrep "love(d|es)" test.txt
loved
[root@nfs test]# cat test.txt
love
live
es
loved
二、grep
返回值
0是找到了
1是没有找到
2找的地方错误
[root@nfs test]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
apache:x:48:48:Apache:/opt/rh/httpd24/root/usr/share/httpd:/sbin/nologin
[root@nfs test]# echo $?
0
[root@nfs test]# grep root1 /etc/passwd
[root@nfs test]# echo $?
1
[root@nfs test]# grep root1 /etc/
grep: /etc/: 是一个目录
[root@nfs test]# echo $?
2
1.grep
[root@nfs test]# grep -q root /etc/passwd //静默参数
[root@nfs test]# echo $?
0
[root@nfs test]# grep -v root /etc/passwd //取反,除了root不找,其他的全部找
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
[root@nfs test]# grep -R root /etc/ //可以查看目录下面的文件
/etc/fstab:/dev/mapper/centos-root / xfs defaults 0 0
/etc/mtab:rootfs / rootfs rw 0 0
/etc/mtab:/dev/mapper/centos-root / xfs rw,relatime,attr2,inode64,noquota 0 0
/etc/grub.d/00_header:datarootdir="/usr/share"
/etc/grub.d/00_header:export TEXTDOMAINDIR="${datarootdir}/locale"
/etc/grub.d/00_header:if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT}"` ; then
[root@nfs test]# grep -o root /etc/passwd //只找到关键字就行了
root
root
root
root
root
[root@nfs test]#
[root@nfs test]# vim test.txt
[root@nfs test]# cat test.txt
11111111
22222222
33333333
abc
4444444444
5555555555
66666666666
77777777777
[root@nfs test]# grep -B2 abc test.txt //关键字的前两行
22222222
33333333
abc
[root@nfs test]# grep -A2 abc test.txt //关键字的后两行
abc
4444444444
5555555555
[root@nfs test]# grep -C2 abc test.txt //关键字的前两行和后两行
22222222
33333333
abc
4444444444
5555555555
[root@nfs test]# grep -l -R abc /root/test //根据文件内容,查找内容所在的文件名
/root/test/test.txt
[root@nfs test]# grep -n root /etc/passwd //带行号显示
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
45:apache:x:48:48:Apache:/opt/rh/httpd24/root/usr/share/httpd:/sbin/nologin
2.egrep
3.fgrep
三、sed
1、删除命令:d
[root@nfs test]# head -n 10 /etc/passwd > ./test01.txt
[root@nfs test]# cat test01.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
[root@nfs test]# vim test01.txt
[root@nfs test]# sed -r '/root/d' test01.txt
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
[root@nfs test]# sed -r '3d' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
//'3d' 和 '3{d}'作用一样
[root@nfs test]# sed -r '4{d}' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# sed -r '3,$d' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
[root@nfs test]# sed -r '$d' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
[root@nfs test]# sed -ri '3,$d' test01.txt
#在选项加上i才真正在文件中删除
2、替换命令:s
[root@nfs test]# sed -r 's/root/guan/' test01.txt
guan:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/guan:/sbin/nologin10
[root@nfs test]# sed -r 's/root/guan/g' test01.txt
guan:x:0:0:guan:/guan:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/guan:/sbin/nologin10
[root@nfs test]# sed -r 's/^root/guan/g' test01.txt
guan:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# sed -r 's/[0-9][0-9]$/&.3/' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10.3
[root@nfs test]# sed -r 's/(mail)/EAIL\1/g' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
EAILmail:x:8:12:EAILmail:/var/spool/EAILmail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# sed -r 's/(mail)/E\1/g' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
Email:x:8:12:Email:/var/spool/Email:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# sed -r 's#(mail)#E\1#g' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
Email:x:8:12:Email:/var/spool/Email:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
3、读文件命令:r
#读取up.txt文件并追加到test01.txt文件中
[root@nfs test]# sed -r '$r up.txt' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
2.200.168.192
192.168.200.184
192.168.200.182
#读取up.txt文件并在/roo后追加到test01.txt文件中
[root@nfs test]# sed -r '/root/r up.txt' test01.txt
root:x:0:0:root:/root:/bin/bash1
2.200.168.192
192.168.200.184
192.168.200.182
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
2.200.168.192
192.168.200.184
192.168.200.182
[root@nfs test]#
4、写文件命令:w(另存为)
[root@nfs test]# sed -r 'w abc.txt' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# cat abc.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
#指定要写入文件a.txt为/roo后的内容
[root@nfs test]# sed -r '/root/w a.txt' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# cat a.txt
root:x:0:0:root:/root:/bin/bash1
operator:x:11:0:operator:/root:/sbin/nologin10
#将test01.txt文件中的前3行写入文件b.txt中
[root@nfs test]# sed -r '1,3w b.txt' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# cat b.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
5、追加命令:a(之后)
[root@nfs test]# sed -r 'a123' test01.txt
root:x:0:0:root:/root:/bin/bash1
123
bin:x:1:1:bin:/bin:/sbin/nologin2
123
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
123
adm:x:3:4:adm:/var/adm:/sbin/nologin4
123
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
123
sync:x:5:0:sync:/sbin:/bin/sync6
123
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
123
halt:x:7:0:halt:/sbin:/sbin/halt8
123
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
123
operator:x:11:0:operator:/root:/sbin/nologin10
123
[root@nfs test]# sed -r '3a123' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
123
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
#在文件test01.txt中第3行后加三行内容
[root@nfs test]# sed -r '3a123\
456\
789' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
123
456
789
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
6、插入命令:i(之前)
#在第3行内容前插入abcedf
[root@nfs test]# sed -r '3iabcdef' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
abcdef
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
7、替换整行命令:c
[root@nfs test]# sed -r '3cabcedfghijklnmopqrst' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
abcedfghijklnmopqrst
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
8、获取下一行命令:n
[root@nfs test]# sed -r '/root/{n;d}' test01.txt
root:x:0:0:root:/root:/bin/bash1
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# sed -r '/root/{n;s/bin/ding/g}' test01.txt
root:x:0:0:root:/root:/bin/bash1
ding:x:1:1:ding:/ding:/sding/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
9、反向选择:!
[root@nfs test]# sed -r '2,$d' test01.txt
root:x:0:0:root:/root:/bin/bash1
[root@nfs test]# sed -r '2,$!d' test01.txt
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]#
10、多重编辑:e
[root@nfs test]# sed -r -e '1,5d' -e '6d' -e '9s/mail/email/g' test01.txt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
email:x:8:12:email:/var/spool/email:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
11、暂存空间:hHGgx
暂存和取用命令:h覆盖暂存空间 H追加暂存空间 g覆盖行 G追加行
[root@nfs test]# sed -r 'g' test01.txt //结果显示10行空白
[root@nfs test]#
[root@nfs test]# sed -r 'G' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]#
[root@nfs test]# sed -r '1h;$G' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
root:x:0:0:root:/root:/bin/bash1
[root@nfs test]# sed -r '1h;2G;3G;$G' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
root:x:0:0:root:/root:/bin/bash1
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
root:x:0:0:root:/root:/bin/bash1
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
root:x:0:0:root:/root:/bin/bash1
[root@nfs test]#
[root@nfs test]# sed -r '1{h;d};$G' test01.txt
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
root:x:0:0:root:/root:/bin/bash1
[root@nfs test]# sed -r '1h;2,$g' test01.txt
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
root:x:0:0:root:/root:/bin/bash1
[root@nfs test]# sed -r '1h;2,3H;$G' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
[root@nfs test]# sed -r '4h;5x;6G' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
adm:x:3:4:adm:/var/adm:/sbin/nologin4
sync:x:5:0:sync:/sbin:/bin/sync6
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
四、awk
1.语法格式:
awk [选项] '命令' 文件名
[root@nfs test]# awk -F: '{print $1,$3}' /etc/passwd | head -2
root 0
bin 1
命令:BEGIN{} {} END{}
BEGIN{}:begin 发生在行处理之前(大写)
{} :行处理时,读一行执行一次
END{}: 行处理后
例子
[root@nfs test]# awk '{print $0}' up.txt
2.200.168.192
192.168.200.184
192.168.200.182
[root@nfs test]# awk 'BEGIN{print 1/2}{print"ok"}{print $0}' up.txt
0.5
ok
2.200.168.192
ok
192.168.200.184
ok
192.168.200.182
[root@nfs test]# awk 'BEGIN{print 1/2}{print"ok"}{print $0}END{print "-----------"}' up.txt
0.5
ok
2.200.168.192
ok
192.168.200.184
ok
192.168.200.182
-----------
2.内部变量:
1、FS:输入字段分隔符(默认空格)
[root@nfs test]# awk 'BEGIN{FS=":"} {print $1,$3}' /etc/passwd | head -2
root 0
bin 1
2、OFS:输出字段分隔符
[root@nfs test]# awk 'BEGIN{FS=":";OFS=">>>"} {print $1,$3}' /etc/passwd | head -2
root>>>0
bin>>>1
[root@nfs test]# awk 'BEGIN{FS=":";OFS="--->"} {print $1,$3}' /etc/passwd | head -2
root--->0
bin--->1
3、RS:输入记录(行)分隔符,默认换行符
[root@nfs test]# awk 'BEGIN{} {print $0}' test.txt
1111111 aaaaaa aaaa:bbbb:ccccc
22222222 cccc dddd:eeee:fffff
33333333 gggg hhhh:rrrr:ttttt
abc
4444444444
5555555555
66666666666
77777777777
[root@nfs test]# awk 'BEGIN{RS=" "} {print $0}' test.txt
1111111
aaaaaa
aaaa:bbbb:ccccc
22222222
cccc
dddd:eeee:fffff
33333333
gggg
hhhh:rrrr:ttttt
abc
4444444444
5555555555
66666666666
77777777777
4、ORS:输出记录(行)分隔符,默认换行
[root@nfs test]# awk 'BEGIN{} {print $0}' test.txt
1111111 aaaaaa aaaa:bbbb:ccccc
22222222 cccc dddd:eeee:fffff
33333333 gggg hhhh:rrrr:ttttt
abc
4444444444
5555555555
66666666666
77777777777
[root@nfs test]# awk 'BEGIN{ORS="+++"} {print $0}' test.txt
1111111 aaaaaa aaaa:bbbb:ccccc+++22222222 cccc dddd:eeee:fffff+++33333333 gggg hhhh:rrrr:ttttt+++abc+++4444444444+++5555555555+++66666666666+++77777777777+++[root@nfs test]#
5、FNR:多文件独立编号
6、NR:多文件汇总编号
[root@nfs test]# cat a.txt
root:x:0:0:root:/root:/bin/bash1
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# cat b.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
[root@nfs test]# awk '{print $0}' a.txt b.txt
root:x:0:0:root:/root:/bin/bash1
operator:x:11:0:operator:/root:/sbin/nologin10
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
[root@nfs test]# awk '{print NR,$0}' a.txt b.txt
1 root:x:0:0:root:/root:/bin/bash1
2 operator:x:11:0:operator:/root:/sbin/nologin10
3 root:x:0:0:root:/root:/bin/bash1
4 bin:x:1:1:bin:/bin:/sbin/nologin2
5 daemon:x:2:2:daemon:/sbin:/sbin/nologin3
7、NF:字段总数
[root@nfs test]# awk -F: '{print NF,$0}' /etc/passwd | head -n 3
7 root:x:0:0:root:/root:/bin/bash
7 bin:x:1:1:bin:/bin:/sbin/nologin
7 daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@nfs test]# awk -F: '{print NF,$NF}' /etc/passwd | head -n 3
7 /bin/bash
7 /sbin/nologin
7 /sbin/nologin
[root@nfs test]# awk -F: '{print $(NF-1)}' /etc/passwd | head -n 3
/root
/bin
/sbin
3.格式化输出
print 函数
[root@nfs test]# date
2023年 01月 02日 星期一 19:45:58 CST
[root@nfs test]# date | awk '{print "今天是:" $4}'
今天是:星期一
printf 函数
[root@nfs test]# head -3 /etc/passwd |awk -F: '{print $1,$2,$3}'
root x 0
bin x 1
daemon x 2
[root@nfs test]# head -3 /etc/passwd |awk -F: '{printf "%-10s %-10s %-15s\n",$1,$2,$3}'
root x 0
bin x 1
daemon x 2
4.模式(正则表达式)和动作
1、字符串的比较
[root@nfs test]# awk '/^root/' test01.txt
root:x:0:0:root:/root:/bin/bash1
[root@nfs test]# awk '$0 ~ /^root/' test01.txt
root:x:0:0:root:/root:/bin/bash1
[root@nfs test]# awk '$0 !~ /^root/' test01.txt
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# awk '$1 !~ /^root/' test01.txt
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@nfs test]# awk '$1 ~ /^root/' test01.txt
root:x:0:0:root:/root:/bin/bash1
2、数值的比较
[root@nfs test]# awk -F: '$3==0' test01.txt
root:x:0:0:root:/root:/bin/bash1
[root@nfs test]# awk -F: '$3==1' test01.txt
bin:x:1:1:bin:/bin:/sbin/nologin2
[root@nfs test]# awk -F: '$3<10' test01.txt
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
[root@nfs test]# head -10 /etc/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
[root@nfs test]# head -10 /etc/passwd |awk -F: '$7 == "/sbin/nologin"'
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
4、多条件
语法:
&& 逻辑与 a&&b
|| 逻辑或 a||b
! 逻辑非 !a
[root@nfs test]# head -10 /etc/passwd | awk -F: '$1 ~ /root/ && $3<=10'
root:x:0:0:root:/root:/bin/bash
[root@nfs test]# head -10 /etc/passwd | awk -F: '$1 ~ /root/ || $3<=3'
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
[root@nfs test]# head -10 /etc/passwd | awk -F: '!($1 ~ /root/ || $3<=3)'
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
范围模式:
语法
awk '/从哪里/,/到哪里/' 文件名
[root@nfs test]# head -10 /etc/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
[root@nfs test]# head -10 /etc/passwd | awk -F: '/daemon/,/mail/'
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
5.awk脚本编程
1、变量
awk调用变量
1.1自定义内部变量 -v
[root@nfs test]# awk -v user=root -F: '$1==user' /etc/passwd
root:x:0:0:root:/root:/bin/bash
1.2外部变量
单引号
[root@nfs test]# var=linux
[root@nfs test]# echo "hello" | awk '{print 666,"'"$var"'"}'
666 linux
双引号
[root@nfs test]# var=linux
[root@nfs test]# echo "hello" | awk "{print \"$var\"}"
linux
2、条件&判断
单分支
if(表达式 )
{
}
例子
目的:如果$3是0,就说他是管理员
[root@nfs test]# head -10 /etc/passwd | awk -F: '{ if($3==0) {print $1,"is administrator"} }'
root is administrator
双分支
if(表达式 )
{
}
else
{
}
例子
目的:如果第三列是0,打印该行第一列,否则打印第七列
[root@nfs test]# head -10 /etc/passwd | awk -F: '{ if($3==0) {print $1}else {print $7} }' root
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
例子
目的:统计管理员和普通用户个数
[root@nfs test]# head -10 /etc/passwd | awk -F: '{ if($3==0){count++}else{i++} } END{print "管理员:"count;print "普通用户:"i}'
管理员:1
普通用户:9
多分支
if(表达式 )
{
}
else if()
{
}
else
{
}
例子
目的:显示出三种用户的信息,其中管理员id为0,内置用户id<1000,普通用户id>999
[root@nfs test]# cat /etc/passwd |awk -F: '{if($3==0){i++}else if($3>999){j++}else {k++}}END{print "管.理员:i;print "内置用户:"j;print "普通用户:"k}'
管理员:1
内置用户:22
普通用户:44
3、循环
while循环
[root@nfs test]# awk 'BEGIN{while(i<=10){print i;i++}}'
1
2
3
4
5
6
7
8
9
10
for循环
[root@nfs test]# awk 'BEGIN{for(i=1;i<=5;i++){print i}}'
1
2
3
4
5
[root@nfs test]# awk '{i=1;while(i<=10){print $0;i++}}' up.txt
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
[root@nfs test]# awk '{for(i=1;i<=5;i++){print $0}}' up.txt
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
2.200.168.192
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.184
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
192.168.200.182
4、数组
例子
目的:将用户名定义为数组的值,打印第一个值
[root@nfs test]# cat /etc/passwd | awk -F: '{username[i++]=$1}END{print username[0]}'
root
数组的遍历
[root@nfs test]# cat /etc/passwd | awk -F: '{username[i++]=$1}END{for(j in username){print j,username[j]}}' | sort -k1 -n //用sort进行排序,k1第一列进行排序,n按照数字的形式进行排序
0 root
1 bin
2 daemon
3 adm
4 lp
5 sync
6 shutdown
7 halt
8 mail
9 operator
10 games
11 ftp
12 nobody
13 systemd-network
14 dbus
15 polkitd
16 libstoragemgmt
17 colord
18 rpc
19 saslauth
20 abrt
21 rtkit
22 pulse
23 chrony
24 radvd
25 rpcuser
26 nfsnobody
27 unbound
28 gluster
29 qemu
30 tss
31 usbmuxd
32 geoclue
33 setroubleshoot
34 saned
35 gdm
36 gnome-initial-setup
37 sshd
38 avahi
39 postfix
40 ntp
41 tcpdump
42 Guanguan
43 zabbix
44 apache
45 nginx
46 mysql
47 guan
48 Guan
49 guanguan
50 luo
51 user0013
52 user3
53 userB1
54 userB2
55 userB3
56 userB4
57 userB5
58 userA
59 userB
60 userC
61 userD
62 luo1
63 luo2
64 luo3
65 user1
66 user2
5、awk脚本案例