Linux常用命令(博客地图):https://blog.csdn.net/sysukehan/article/details/105804511
1、正则表达式的特殊符号
[:alnum:]:代表英文大小写字符及数字,即0-9,a-z,A-Z
[:alpha:]:代表任何英文大小写字符,即a-z,A-Z
[:blank:]:代表空格键与[Tab]按键
[:digit:]:代表数字,0-9
[:graph:]:除了空格符(空格键与[Tab]按键)外的其他所有按键
[:lower:]:代表小写字符,即a-z
[:punct:]:代表标点符号(punctuation symbol),即”’?!;:#$
[:upper:]:代表大写字符,即A-Z
[:space:]:任何会产生空白的字符,包括空格键[Tab]CR等
2、grep的一些高级参数
参数:
-A:后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来;
-B:后面可加数字,为before的意思,除了列出该行外,前面的n行也列出来;
--color=auto可将正确的那个选取数据列出颜色。
如果想让grep每次选出来的关键字都带上颜色,同时又不需要输入—color=auto参数,可以在~/.bashrc文件中加上alias grep=’grep –color=auto’,再用source命令重新加载环境变量即可(source ~/.bashrc),这样每次执行grep就会自动给关键在加上颜色了。
3、基础正则表达式
1)查找特定字符串
grep -n 'the' filename
2)利用中括号[]来查找集合字符
grep -n 't[ae]st' filename
这样就会在文件中寻找包含tast和test关键字的行。
利用集合字符的反向选择[^]排除不想要的关键字前缀:
grep -n '[^g]oo' filename
这样就可以选出含oo关键字但oo前又不是g的行。
如果是oo前不想要有小写字母,可以写成:
grep -n '[^a-z]oo' filename或者grep -n '[^[:lower:]]oo' filename
如果想要包含数字的行,可以写成:
grep -n '[0-9]' filename或者grep -n '[:digit:]' filename
3)行首与行尾字符^$
查找文件中the开头的行:grep -n '^the' filename
查找文件中小写字母开头的行:
grep -n '^[a-z]' filename或grep -n '^[[:lower:]]' filename
不想要开头是英文字母的行:
grep -n '^[^a-zA-Z]' filename或grep -n '^[^[:alpha:]]' filename
找出小数点结尾的行:
grep -n '\.$' filename,因为.是特殊字符,所以需要用\进行转义。
找出空白行:grep -n '^$' filename
不要空白行,也不要开头是#的行,用来查看配置文件的有效配置很有用:
grep -v '^$' /etc/ssh/ssh_config | grep -v '^#'
4)任意一个字符.与重复字符*
.(小数点):代表一定有一个任意字符的意思;
*(星号):代表重复前一个0到无穷多次的意思,为组合形态;
需要找出包含g??d的字符串:grep -n 'g..d' filename
需要找出两个o以上的字符串:grep -n 'ooo*' filename
找出字符串开头与结尾都是g,但是两个g之间仅能存在至少一个o的字符串:
grep -n 'goo*g' filename
找出字符串开头与结尾都是g,两个g中间的字符可有可无:
grep -n 'g.*g' filename
5)限定连续RE字符范围{}
因为{与}的符号在shell中是有特殊意义的,因此,必须要使用转义字符\让他们失去特殊意义。
找出包含至少2个o的字符串:grep -n 'o\{2\}' filename
找出g后面包含2-5个o再接一个g的字符串:grep -n 'go\{2,5\}g' filename
找出g后面包含2个o及以上再接一个g的字符串:grep -n 'go\{2,\}g' filename
6)总结
RE字符 | 意义 | ^word | 待查找的字符串(word)在行首。 | word$ | 待查找的字符串(word)在行尾。 | . | 代表一定有一个任意字符的字符。 | \ | 转义字符,将特殊符号的特殊意义去除。 | * | 重复零个到无穷多个的前一个字符。 | [list] | 从字符集合的RE字符里面找出想要选取的字符。 | [n1-n2] | 从字符集合的RE字符里面找出想要选取的字符范围。 | [^list] | 从字符集合的RE字符里面找出不要的字符串或范围。 | \{n,m\} | 连续n到m个的前一个RE字符,若为\{n\}则是连续n个的前一个RE字符,若为\{n,\}则是连续n个及以上的前一个RE字符。 |
4、扩展正则表达式
RE字符 | 意义与范例 | + | 意义:重复一个或一个以上的前一个RE字符。 范例:查找(god)(good)(goood)等的字符串: egrep -n 'go+d' filename | ? | 意义:零个或一个的前一个RE字符。 范例:查找(gd)(god)这两个字符串: egrep -n 'go+d' filename | | | 意义:用或(or)的方式找出数个字符串。 范例:查找gd或good这两个字符串: egrep -n 'gd|good' filename | () | 意义:找出“组”字符串 范例:查找(glad)或(good)这两个字符串: egrep -n 'g(la|oo)d' filename | ()+ | 意义:多个重复组的判别 范例:找出开头是A,结尾是C,中间有一个或以上的“xyz”的字符串; egrep 'A(xyz)+C' filename |
egrep等同于grep -E,grep不识别扩展的正则表达式,egrep或者grep -E才能识别。
参考资料
《鸟哥的Linux私房菜基础学习篇(第三版)》
|