正则

grep命令

是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

1.grep命令

2. -c 查看行数

[root@bogon grep]# grep -c 'nologin' passwd 
41
[root@bogon grep]# 

3.-n显示行号

4.-i不区分大小写

5.-v取反,就是除了匹配的行剩下的显示出来

[root@bogon grep]# grep -vni 'nologin' passwd 
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
44:sunyujun:x:1000:1000:sunyujun:/home/sunyujun:/bin/bash
[root@bogon grep]# 

6.-r 遍历所有子目录

7.-A指定列出查找到行的下面两行 -B指定列出查找到行的上面两行  -C 指定列出查找到行的上下两行

[root@bogon grep]# grep -A2 'nologin' passwd 

8.[root@bogon grep]# grep [0-9] passwd  匹配数字

9.^以什么开头

[root@bogon grep]# grep -n '^a' passwd     
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
34:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
41:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
[root@bogon grep]# 

10..匹配任意一个字符

[root@bogon grep]# grep -n 'a.t' passwd    
8:halt:x:7:0:halt:/sbin:/sbin/halt
24:saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
27:rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
34:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
[root@bogon grep]# 

11.*匹配前面的子表达式0或多次

12.{} 匹配次数,用egrep就不用转译了或者用grep -E

12.+匹配前面的子表达式一次或多次

12.?匹配前面的子表达式零次或一次

 

13.| 或者

sed命令

https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html 

是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed 可以实现 grep的功能,还可以替换文件内容
1.sed匹配字符串,p打印,-n 只显示匹配的行,不加-n会把所有的行都显示出来

[root@bogon sed]# sed -n '/root/'p passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@bogon sed]# 

2.sed也支持. * +

[root@bogon sed]# sed -n '/r.t/'p passwd 
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@bogon sed]#

3.匹配+号需要转译或者加r选项

[root@bogon sed]# sed -n '/o+t/'p passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
[root@bogon sed]# sed -nr '/o+t/'p passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
[root@bogon sed]# 

4.sed支持{} | 

[root@bogon sed]# sed -nr '/o{2}/'p passwd 
root:x:0:0:root:/root:/bin/bash
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
setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@bogon sed]#

[root@bogon sed]# sed -nr '/root|bash/'p passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sunyujun:x:1000:1000:sunyujun:/home/sunyujun:/bin/bash
[root@bogon sed]# 

5.sed打印指定的行(打印第2行)

[root@bogon sed]# sed -n '2'p passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
[root@bogon sed]# 

6.sed打印2-5行

[root@bogon sed]# sed -n '2,5'p passwd 
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
[root@bogon sed]# 

7.sed 打印2到行尾

[root@bogon sed]# sed -n '2,$'p passwd 

8.sed 打印全部行

[root@bogon sed]# sed -n '1,$'p passwd 

9.sed -e直接在命令列模式上进行 sed 的动作编辑;匹配第一行并且匹配bus

[root@bogon sed]# sed -e '1'p -e '/bus/'p -n passwd 
root:x:0:0:root:/root:/bin/bash
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@bogon sed]#

 10.sed不区分大小写匹配 + 大写的 i

[root@bogon sed]# sed -n '/bus/'p passwd 
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@bogon sed]# sed -n '/bus/'Ip passwd  
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@bogon sed]# 

11.sed删除匹配的行+i 选项是真删除了,不加i只是在屏幕上显示效果(删除前两行)

[root@bogon sed]# sed -i '1,2'd passwd 

12.sed将root相关的行删掉

[root@bogon sed]# sed -i '/root/'d passwd

13.sed替换功能将1-10行的root全部替换成toor

[root@bogon sed]# sed '1,10s/root/toor/g' passwd
toor:x:0:0:toor:/toor:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

14.sed支持正则替换将roo替换成r

[root@bogon sed]# sed -r '1,10s/ro+/r/g' passwd     
rt:x:0:0:rt:/rt:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

15.将第一段和最后一段调换位置

[root@bogon sed]# head 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@bogon sed]# head passwd |sed -r 's/([^:]+):(.*):([^:]+)/3:2:1/'
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator
[root@bogon sed]# 

16.将所有的英文字母替换掉

[root@bogon sed]# head passwd |sed 's/[a-zA-Z]//g'
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://
::8:12::///://
::11:0::/://
[root@bogon sed]# 

 17.给所有的行前面加上aaa

[root@bogon sed]# head passwd |sed -r 's/(.*)/aaa:&/'
aaa:root:x:0:0:root:/root:/bin/bash
aaa:bin:x:1:1:bin:/bin:/sbin/nologin
aaa:daemon:x:2:2:daemon:/sbin:/sbin/nologin
aaa:adm:x:3:4:adm:/var/adm:/sbin/nologin
aaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
aaa:sync:x:5:0:sync:/sbin:/bin/sync
aaa:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
aaa:halt:x:7:0:halt:/sbin:/sbin/halt
aaa:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
aaa:operator:x:11:0:operator:/root:/sbin/nologin
[root@bogon sed]# 

awk命令

1.支持分段查找(查找以冒号分割开的第一段)

[root@bogon awk]# awk -F ':' '{print $1}' passwd          
root
bin
daemon
adm
lp
sync
shutdown
halt
mail

2.打印所有的段

[root@bogon awk]# awk -F ':' '{print $0}' passwd  
[root@bogon awk]# awk '{print $0}' passwd 

3.不指定分割符默认以空格分割

[root@bogon awk]# awk '{print $1}' passwd

4.打印多列

[root@bogon awk]# awk -F ':' '{print $1,$2,$3}' passwd 
root x 0
bin x 1
daemon x 2
adm x 3
lp x 4
sync x 5

5.打印结果用#号分割

[root@bogon awk]# awk -F ':' '{print $1"#"$2"#"$3}' passwd   
root#x#0
bin#x#1
daemon#x#2
adm#x#3
lp#x#4

6.查找有oo的行

[root@bogon awk]# awk '/oo/' passwd 
root:x:0:0:root:/root:/bin/bash
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
setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@bogon awk]# 

7.匹配第一段包含oo的行

[root@bogon awk]# awk -F ':' '$1 ~ /oo/' passwd 
root:x:0:0:root:/root:/bin/bash
setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
[root@bogon awk]# 

8.同样支持正则表达式+查找第一行有oo的

[root@bogon awk]# awk -F ':' '$1 ~ /oo+/' passwd 
root:x:0:0:root:/root:/bin/bash
setroubleshoot:x:990:987::/var/lib/setroubleshoot:/sbin/nologin
[root@bogon awk]# 

9.支持多个表达式一起写

[root@bogon awk]# awk -F ':' '/root/ {print $1,$3} /user/ {print $3,$4}' passwd 
root 0
operator 11
59 59
113 113
993 76
75 75
107 107
29 29
[root@bogon awk]# 
[root@bogon awk]# grep -E 'root|user' passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
[root@bogon awk]# 
[root@bogon awk]# awk -F ':' '/root|user/ {print $0}' passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
[root@bogon awk]# 

10.查找第三段等于0的

[root@bogon awk]# awk -F ':' '$3==0' passwd 
root:x:0:0:root:/root:/bin/bash
[root@bogon awk]# 

11.就要第一段(注意:数字比较的时候不要加双引号)

[root@bogon awk]# awk -F ':' '$3==0 {print $1}' passwd  
root
[root@bogon awk]# 

12.大于等于

[root@bogon awk]# awk -F ':' '$3>=1000 {print $1}' passwd 
nfsnobody
sunyujun
mysql
www
[root@bogon awk]# 
[root@bogon awk]# awk -F ':' '$3>=1000 {print $0}' passwd  
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sunyujun:x:1000:1000:sunyujun:/home/sunyujun:/bin/bash
mysql:x:1001:1001::/home/mysql:/sbin/nologin
www:x:1002:1002::/home/www:/sbin/nologin
[root@bogon awk]# 

13.不等于

[root@bogon awk]# awk -F ':' '$7!="/sbin/nologin" {print $0}' passwd 
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
sunyujun:x:1000:1000:sunyujun:/home/sunyujun:/bin/bash
[root@bogon awk]# 

14.变量比较

[root@bogon awk]# awk -F ':' '$3<$4' passwd  
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@bogon awk]# 

15.&& 比较

[root@bogon awk]# awk -F ':' '$3>"5" && $3<"7"' passwd    
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@bogon awk]# 

16. ||

[root@bogon awk]# awk -F ':' '$3>2500 || $7=="/sbin/nologin"' passwd 

17.~匹配 第七段包含/sbin/nologin的或者第三段大于2000的

[root@bogon awk]# awk -F ':' '$3>2000 || $7 ~ /sbin/nologin' passwd     
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@bogon awk]# 

18.OFS 定义打印的分隔符

[root@bogon awk]# awk -F ':' '{OFS="#"} $3>2000 || $7 ~ /sbin/nologin {print $1}' passwd  
nfsnobody
[root@bogon awk]# 

19.if判断

[root@bogon awk]# awk -F ':' '{OFS="#"} {if ($3 > 1000) {print $1,$2}}' passwd 
nfsnobody#x mysql#x www#x [root@bogon awk]#

20.NR 标示行号

[root@bogon awk]# awk -F ':' '{print NR":"$0}' passwd 
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin

21.NF显示有多少段

[root@bogon awk]# awk -F ':' '{print NF":"$0}' passwd                           
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
7:adm:x:3:4:adm:/var/adm:/sbin/nologin
7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
7:halt:x:7:0:halt:/sbin:/sbin/halt
7:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
7:operator:x:11:0:operator:/root:/sbin/nologin

22.打印前十行

[root@bogon awk]# awk -F ":" 'NR<=10' 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@bogon awk]# 

23..打印前十行并且包含root或者sync

[root@bogon awk]# awk -F ":" 'NR<=10 && $1 ~ /root|sync/' passwd  
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
[root@bogon awk]# 

24.NF=6

[root@bogon awk]# awk -F ":" 'NF=6 && $1 ~ /root|sync/' passwd      
root
sync
[root@bogon awk]# 

25. $NR":"$NF

[root@bogon awk]# awk -F ":" '{print $NR":"$NF}' passwd                         
root:/bin/bash
x:/sbin/nologin
2:/sbin/nologin
4:/sbin/nologin
lp:/sbin/nologin
/sbin:/bin/sync
/sbin/shutdown:/sbin/shutdown
:/sbin/halt
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin
:/sbin/nologin

26.$1赋值操作

[root@bogon awk]# head -n 3 /etc/passwd |awk -F ':' '$1="root"'
root x 0 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin
[root@bogon awk]# 

27.第三列循环求和

[root@bogon awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' passwd 
82198
[root@bogon awk]# 

 

  

 

 

 

原文地址:https://www.cnblogs.com/sunyujun/p/8193750.html