【 shell 编程 】第5篇 文本编辑三剑客

news2024/9/19 10:38:14

文本编辑三剑客


文章目录

  • 文本编辑三剑客
  • 一、正则表达式
    • 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脚本案例


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

点云算法-提取kitti路面点云

目录 一、ransac原理 二、ransac 地面分割原理 三、ransac常见应用 四、代码 五、截图 六、总结 一、ransac原理 RANSAC是“random sample consensus&#xff08;随机抽样一致&#xff09;”的缩写。它可以从一组包含“局外点”的观测数据集中&#xff0c;通过迭代方式估…

【408篇】C语言笔记-第二十一章(汇编语言)

文章目录第一节&#xff1a;汇编指令格式讲解1. 汇编指令格式2. 生成汇编方法第二节&#xff1a;汇编常用指令讲解1. 相关寄存器2. 常用指令3. 条件码第三节&#xff1a;各种变量赋值汇编实战1. 各种变量赋值汇编实战解析第四节&#xff1a;选择循环汇编实战1. 选择循环汇编实战…

基于ssm+mysql+jsp实现歇后语管理系统

基于ssmmysqljsp实现歇后语管理系统一、系统介绍二、系统展示1.歇后语大全2.歇后语排行榜3.歇后语管理4.用户管理三、其它系统四、获取源码一、系统介绍 本系统实现了 普通用户&#xff1a;歇后语大全、歇后语排行榜、歇后语管理 管理员用户&#xff1a;歇后语大全、歇后语排行…

一键替换Markdown文件的字体样式

功能说明 一键替换MD文件的字体样式&#xff1a;加粗字体—>橙色不加粗 也可以针对其它样式做切换&#xff0c;源码就一个demo类&#xff0c;修改正则匹配相关变量即可&#xff1b; 环境要求&#xff1a; windows jdk1.8 工具下载 百度网盘&#xff1a;提取码: ae16 …

week9

T1【深基18.例3】查找文献 题目描述 小K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个&#xff08;也有可能没有&#xff09;参考文献的链接指向别的博客文章。小K 求知欲旺盛&#xff0c;如果他看了某篇文章&#xff0c;那么他一定会去看这篇文章的参考文献&#xff0…

7.1 定义抽象数据类型

文章目录定义改进的Sales_data 类定义成员函数引入this指针引入const成员函数类作用域和成员函数在类的外部定义成员函数定义返回this的函数类的静态成员定义类相关的非成员函数构造函数合成的默认构造函数某些类不能依赖合成的默认构造函数定义构造函数拷贝 赋值和析构某些类不…

11.2、基于Django4的可重用、用户注册和登录系统搭建(优化)

文章目录前端界面设计与优化完善登录界面的视图函数session会话和登出的视图函数将当前代码推送至Gitee添加图片验证码前端界面设计与优化 使用CSS框架 Bootstrap4&#xff0c;Bootstrap将CSS样式和JS都封装好了&#xff0c;可以直接使用。 下面使用的Bootstrap模板来自官方文…

AHB协议(1/2)

AHB协议&#xff08;1/2&#xff09; 以下内容为AMBA5 AHB Protocol Specification协议内容 Charpter 1 Introduction 1.1 关于AHB协议 AMBA AHB是一个支持高性能设计的总线接口。他在组件间&#xff0c;如主端&#xff08;Master&#xff09;&#xff0c;互联结构&#xf…

云原生之使用Docker部署Dailynotes个人笔记管理工具

云原生之使用Docker部署Dailynotes个人笔记管理工具一、Dailynotes介绍二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载Dailynotes镜像四、创建Dailynotes容器1.创建数据目录2.创建Dailynotes容器3.查看Dailynotes容器状态五、访问Dailynotes1.进入Dailynotes…

uniCloud云开发----5、uni-id-pages的使用

uni-id-pages的使用前言1、下载uni-id-pages插件2、查看登录页面3、配置项云端配置config.json前言 在开发过程中&#xff0c;会发现微信小程序的登录方式不断地更新和变化&#xff0c;这样导致我们在开发过程中非常的困难&#xff0c;uni-id-pages直接集成的页面和数据库来实…

67、【链表】leetcode——242. 有效的字母异位词(C++版本)

题目描述 原题链接&#xff1a;242. 有效的字母异位词 一、ASCII码作为Key 因s和t都为小写字母&#xff0c;因此可将s和t中字母用ASCII码数字表示&#xff0c;减去a&#xff0c;映射到0-25当中&#xff0c;作为Hash表映射结构。 首先&#xff0c;查看s和t的长度是否相同&…

09线性相关、基、维数

线性相关、基、维数 知识概要 ​ 从线性相关或线性无关的特征入手,介绍空间的的几个重要概念:基、维数 线性无关与线性相关 (1)背景知识: 谈论的概念都是基于向量组的,而不是基于矩阵。线 性无关,线性相关是向量组内的关系,基也是一个向量组,不要与矩阵概念混淆。 首先…

华为云工程师HCIA——服务器技术基础

服务器的定义 服务器是计算机的一种。他比普通计算机运行熟读更快、负载更高而且价格更高。 服务器是为用户提供服务的计算机&#xff0c;通常分为文件服务器、数据库服务器和应用程序服务器。 服务器特点 可用性可扩展性可管理性易用性可靠性 服务器硬件结构 Huawei2280…

01 大数据概述

01 大数据概述1、大数据&#xff1a; 主要用来解决海量数据的存储和海量数据的分析计算问题。 2、大数据的特点&#xff1a; 大量&#xff08;Volume&#xff09;&#xff1a;一些大企业的数据量已经接近EB量级。高速&#xff08;Velocity&#xff09;: 随着数据量的增大&…

B树的原理及代码实现、B+树和B*树介绍及应用

目录 一.B树介绍 &#xff08;一&#xff09;.B树存在意义 &#xff08;二&#xff09;.B树的规则 二.B树实现原理及代码 &#xff08;一&#xff09;.实现原理 &#xff08;二&#xff09;.代码 三.B树 &#xff08;一&#xff09;.概念 &#xff08;二&#xff09;.应…

Python批量采集某网站高清壁纸,这下不用担心没壁纸换了

前言 咳咳&#xff0c;担心壁纸不够用&#xff1f;想要一天换一张&#xff1f;ok &#xff0c;今天就来搞搞壁纸网站 之前老有很多高质量的网站都不见了&#xff0c;趁着这个还在&#xff0c;赶紧多保存点 话不多说 马上开始 我的表演 代码 导入模块 所有 源码 点击 此处 领…

矩阵快速幂(新手做法)

1.通过一个代码来了解矩阵乘法2.基本快速幂3.那么最后就是矩阵快速幂了4.练习模板&#xff1a;5.进阶运用&#xff0c;蓝桥杯15届省赛c语言组第9题矩阵快速幂的学习流程&#xff1a; 矩阵乘法运算规则&#xff08;线性代数基础&#xff09;快速幂的模板 1.通过一个代码来了解矩…

S32K144—什么是SBC系统基础芯片?

SBC&#xff08;System Basis Chip&#xff09;芯片在汽车电子领域可谓占一席之地了。那么什么是SBC&#xff1f;怎么用&#xff1f;用在哪里&#xff1f;主要特性&#xff1f; 可以简单理解成&#xff1a;SBC是一类拥有特出功能&#xff08;电源、通信、监控诊断、安全&#…

【附源码】基于fpga的自动售货机(使用三段式状态机实现)

目录 1、VL38 自动贩售机1 题目介绍 思路分析 代码实现 仿真文件 2、VL39 自动贩售机2 题目介绍&#xff1a; 题目分析 代码实现 仿真文件 3、状态机基本知识 1、VL38 自动贩售机1 题目介绍 设计一个自动贩售机&#xff0c;输入货币有三种&#xff0c;为0.5/1/2元&…

嵌入式Linux驱动开发笔记(八)

嵌入式Linux驱动开发笔记&#xff08;八&#xff09; 交叉编译工具说明&#xff1a; 正点原子提供两种交叉编译工具链。这两种交叉编译工具链解释如下图。 我们只需要知道上面的第二种通用的交叉编译器去学习【正点原子】 I.MX6U 嵌入式 Linux 驱动开发指南这本教程。第一种…