Linux三剑客是Linux中非常强悍的文本处理工具,掌握三剑客,文处理已想必会有三剑在手,天下我有的感觉,三剑客之grep家族擅长文本搜索,支持以正则表达式进行文本搜索,使得grep非常强悍,以下内容就grep,egrep和正则表达式展开
Linux文本工具三剑客:
grep、egrep、fgrep:文本搜索工具
sed:流编辑器,也是行编辑器
awk:文本格式化工具,文版报告生成器
正则表达式:是由一类字符所书写出的模式(pattern)
作用:配合支持使用正则表达式的文本搜索工具进行文本过滤
元字符:类似通配符,不表示字符本身的意义,用于额外功能性的描述
分类:基本正则表达式和扩展正则表达式
基本正则表达式(BRE)
字符匹配:
.:任意单个字符
[ ]: 指定范围内的任意单个字符
[0-9],[[:digit:]]:所有数字
[a-z],[[:lower:]]:小写字母
[A-Z],[[:upper:]]:大写字母
[[:alpha:]]:所有大小写字母
[[:alnum:]]:数字及所有大小写字母
[[:space:]]:空白字符
[[:punct:]]:特殊字符
[^]: 指定范围外的任意单个字符
次数匹配:对匹配符前一个字符的出现次数做匹配
*: 前一个字符出现任意次数,如:a*,指a可以出现任意次数,包括0次
\?:前一个字符0或1次
\+:前一个字符出现至少1次
\{m\}: 前一个字符出现m次,作精确匹配
\{m,n\}: 前一个字符至少出现m次,至多n次
\{m,\}: 前一个字符至少出现m次
\{0,n}: 前一个字符至多出现n次
位置锚定:限定所匹配到的字符出现的位置
^:行首锚定
$:行尾锚定
^$:空白行
^[[:space:]]*$:带有空白字符的空白行
\<或\b:词首锚定
\>或\b:词尾锚定
分组:
\(\):对字符分组,如:\(ab\)
引用:
\1:引用表达式中第一个‘左括号和与之对应的右括号’中所匹配到的内容一次,即把括号中的 内容在引用处再显示一次
grep:Global search REgular expression and Print out the line
支持使用正则表达式进行文本搜索并打印出模式所匹配到的行
grep [OPTIONS] PATTERN [FILE...]
--color=auto:对匹配到的字符着色高亮显示(centos7中默认grep=‘grep --color=auto)
-i:忽略大小写
-o:仅显示匹配到的内容
-n:显示行号
-v,--invert-match:取反,显示与匹配模式相反的内容
-E:支持扩展的正则表达式
-q, --quiet, --silient:静默模式,不输出任何信息
实例:
(1)取出/etc/passwd中用户名以“s"开头用户的信息
(2)找出/etc/passwd文件中的三位或四位数
(3)取出shutdown用户的用户信息
(4)取出root用户之外的其他用户信息
(5)取出/etc/bashrc文件中的空白行并打印出行数
(6)找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行
(7)取出默认shell为nologin,用户id最大的用户
(8)取出用户名和默认shell相同的用户信息
扩展正则表达式:(ERE)
字符匹配:同基本正则表达式
.:任意单个字符
[ ]:指定范围内的任意单个字符
[0-9],[[:digit:]]:所有数字
[a-z],[[:lower:]]:小写字母
[A-Z],[[:upper:]]:大写字母
[[:alpha:]]:所有大小写字母
[[:alnum:]]:数字及所有大小写字母
[[:space:]]:空白字符
[[:punct:]]:特殊字符
[^]: 指定范围外的任意单个字符
次数匹配:区别于基本正则表达式少了转义符“\"
*:匹配任意次数
?:0或1次
+:至少一次
{m}:匹配m次
{0,m}:匹配至多m次
{m,}:匹配至少m次
{n,m}:至多m次,至少n次
位置锚定:也同于基本正则表达式
^:行首锚定
$:行尾锚定
^$:空白行
\<或\b:词首锚定
\>或\b:词尾锚定
分组:
(ab)
引用:
\1
或者:
|:a|b,a或b
(C|c)at,Cat或cat
基本正则与扩展正则表元字符使用差异总结:
基本正则表达式和扩展正则表达式的元字符不同在于,扩展正则表达式在作次数匹配和分组不需要转义符"\",并多了”或“匹配
egrep: grep的扩展版本
支持使用扩展正则表达式进行文本搜索并打印出模式所匹配到的行
egrep [OPTIONS] PATTERN [FILE...]
-F, --fixed-strings:支持使用固定字符串,不支持正则表达式,相当于fgrep
-G, --basic-regexp:支持使用基本正则表达式
-P, --perl-regexp:支持使用pcre正则表达式
-e PATTERN, --regexp=PATTERN:多模式机制
-f FILE, --file=FILE:FILE为每行包含了一个pattern的文本文件,即grep script
-A NUM, --after-context=NUM, 显示出匹配行后面的N行
-B NUM, --before-context=NUM,显示出匹配行前面N行
-C NUM, -NUM, --context=NUM,显示出匹配行前后N行
如下图:
-A 2
-B 2
-C 2
grep,egrep的选项基本通用,grep中列举出来的常用选项就不在这里再列举了
实例:(grep中的练习用egrep同样能够实现,以下练习主要演示”|“或的使用)
(1)取出/tmp目录下属组有可读权限的文件或目录
(2)取出# ip add show结果中的1-255中的整数
工具虽然强大,只有熟练掌握才能化为己用,熟悉命令使用只有一条路——把键盘敲烂,别问我为什么,我只能用别人告诉我的话来告诉你:”键盘敲烂,月薪五万“