Shell正则表达式之grep、sed、awk实操笔记

2019-09-23 09:36:01丽君

# grep -n '.$' regular_express.txt

7.显示5-9行数据
# cat -An regular_express.txt |head -n 10 |tail -n 6

8.显示空白行
# grep -n '^$' regular_express.txt

9.找出g??d字符串,起头g结束d的四个字符串
# grep -n 'g..d' regular_express.txt

10. o*代表空字符(就是有没有字符都可以)或者一个到N个o字符,所以grep -n 'o*' regular_express.txt就会把所有行全部打印出来,
11.oo*代表o+空字符或者一个到N个o字符,所以grep -n 'oo*' regular_express.txt就会把o,oo,ooo等的行全部打印出来
12."goo*g"代表gog,goog,gooog...等
# grep -n 'goo*g' regular_express.txt

13.找出含g...g字符串的行
注: .代表任意字符, .*则就代表空字符或者一个到N个任意字符
# grep -n 'g.*g' regular_express.txt

14.找出含有数字的行
# grep -n '[0-9][0-9]*' regular_express.txt
或# grep -n '[0-9]' regular_express.txt

15.找出含两个o的字符串
注:{}因为在shell里有特殊意义,所以需要加跳脱符来让其失去意义
# grep -n 'o{2}'  regular_express.txt
找出g后含2到5个o然后以g结尾的字符串
# grep -n 'go{2,5}g'  regular_express.txt
找出g后含2以上的o然后以g结尾的字符串
# grep -n 'go{2,}g'  regular_express.txt
总结:
^word     表示带搜寻的字符串(word)在行首
word$     表示带搜寻的字符串(word)在行尾
.         表示1个任意字符
         表示转义字符,在特殊字符前加会将原本的特殊字符意义去除
*         表示重复0到无穷多个前一个RE(正则表达式)字符
[list]    表示搜索含有list的字符串
[n1-n2]   表示搜索指定的字符串范围,例如[0-9] [a-z] [A-Z]等
[^list]   表示反向字符串的范围,例如[0-9]表示非数字字符,[A-Z]表示非大写字符范围
{n,m}   表示找出n到m个前一个RE字符
{n,}    表示n个以上的前一个RE字符
egrep总结:
+    表示重复一个或一个以上的前一个RE字符
范例:egrep 'go+d' regular_express.txt
表示搜寻(god)(good)(goood)...等等字符串,o+代表[一个以上的o]
?    表示重复零个或一个的前一个RE字符
范例:egrep 'go?d' regular_express.txt
表示搜寻(gd)(god)字符串,o?代表[空的或1个o]
注:egrep下'go+d'和'go?d'的结果集合就等于grep下的'go*d'
|    表示用或(or)的方式找出数个字符串
范例:egrep 'gd|good|dog' regular_express.txt