shell脚本之正则三剑客(grep awk sed)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

grep:   grep  --color  带颜色,可以用来判断正则写的是否正确:

1、正则中的特殊符号  .   *       .*   +   ? 

.      表示任意一个字符:

*     表示零个或多个星号前面的字符:(a*表示a有零个或者多个)

+    表示一个或多个加号前面的字符:(a+表示a有1个或者多个)   

?   表示另一个或一个问号前面的字符: (a?表示a有零个或这1个)

.*    通配,表示任意个任意字符:  贪婪匹配

[root@localhost_01 ~]# echo 'aaaabbbb'|grep "a*"      #可以匹配,表示匹配多个a:
aaaabbbb
[root@localhost_01 ~]# echo 'bbbb'|grep "a*"            #没有a的时候也匹配,表示匹配零个a:
bbbb
[root@localhost_01 ~]# echo 'aaaabbbb'|grep -E "a+b"    #表示匹配一个或者多个a:
aaaabbbbb
[root@localhost_01 ~]# echo 'aaaabbbb'|grep -E "a?b"     #表示匹配零个或者一个a:
aaaabbbb

[root@localhost_01 ~]# echo 'asdfsdafsadfas'|grep ".*"     #表示任意匹配,贪婪匹配:
asdfsdafsadfas
2、grep  -r  遍历目录:  前面紫色的表示所在目录(后面带冒号)     红色表示过滤的文字:

[root@localhost_01 ~]# grep -r 'root' /root/

/root/shell/test1.sh:filename=/root/shell/123
/root/.viminfo   "   /root/shell
/root/.viminfo:-'  3  1  /data/wwwroot/111.com/123.php
/root/.viminfo:-'  2  0  /data/wwwroot/111.com/123.php
/root/.viminfo:-'  1  0  /data/wwwroot/111.com/123.php
2、sed:

sed  -i  :直接更改源文件:

sed -r 's#([^:]+):(.*):([^:]+)#\3\2\1#g'

head /etc/passwd|sed -r 's#([^:]+):(.*):([^:]+)#\3\2\1#g'
/bin/bashx:0:0:root:/rootroot
/sbin/nologinx:1:1:bin:/binbin
/sbin/nologinx:2:2:daemon:/sbindaemon
/sbin/nologinx:3:4:adm:/var/admadm
/sbin/nologinx:4:7:lp:/var/spool/lpdlp
/bin/syncx:5:0:sync:/sbinsync
/sbin/shutdownx:6:0:shutdown:/sbinshutdown
/sbin/haltx:7:0:halt:/sbinhalt
/sbin/nologinx:8:12:mail:/var/spool/mailmail
/sbin/nologinx:11:0:operator:/rootoperator

3、awk:分隔符  awk  -F ':'

定义多个分隔符:   awk  -F ':|#|?|+'   “{print  $NF}”   test

[root@localhost_01 ~]# head /etc/passwd > test
[root@localhost_01 ~]# awk -F ':' '{print NF}' test
7
7
7
7
6
7
7
4
4
7
[root@localhost_01 ~]# awk -F ':|#|?|+' "{print $1}" test
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

awk可以调用shell的变量:    a=5 ; awk  -v    b=$a'{print b}'

[root@localhost_01 ~]# cat test7.sh 
#!/bin/bash
a=5
awk -v b=$a -F ':' '{print $b}' test
[root@localhost_01 ~]# sh test7.sh 
root
bin
daemon
adm
/var/spool/lpd
sync
shutdown
operator

 

 

转载于:https://my.oschina.net/yuanhaohao/blog/2222476

你可能感兴趣的:(shell脚本之正则三剑客(grep awk sed))