Linux常用命令(正则表达式)

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 22:15   4158   0

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私房菜基础学习篇(第三版)》

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP