grep 是linux系统中一种强大的文本搜索工具:根据用户指定的文本对目标文件进行逐行搜索,显示能够被模式匹配到的行
使用 格式: grep 选项 文件路径(可跟多个文件 )
常用选项有: grep -v:反向,显示不能够被模式匹配到的行
grep -o:仅显示被模式匹配到的字符串,而非整行
grep -i:不区分字符大小写
grep -E:扩展正则表达式
要想使用grep做到精确匹配,就要先掌握正则表达式; 正则表达是一类字符所书写的模式,由元字符+所要匹配的条件组成, 元字符不代表字符本身的意义,用于额外功能性的描述
下面先介绍基本正则表达式常用到的元字符
字符匹配:
. :匹配一行中任意单个字符,如:grep “r..t” 查找文件中字母r开头中间跟任意两个字符字母t结尾的单词的行
[ ]:指定范围内的任意单个字符,如:grep [ r ] 查找文件中包含字母“r"的行
[^]:匹配指定范围外的任意单个字符,如:grep [^r] 查找文件中除了字母“r”以外的任意字符
次数匹配:
* : 匹配任意次(包括0次),如:grep “x*y” 表示匹配y前面字符x出现0次或任意次的字符
\? : 匹配其前面字符0次或1次,如:grep ”x\?y" 表示匹配y前面字符x出现0次或1次
\{m\} : 指定匹配其前面字符m次,如:grep "x\{2\}y“ 表示精确匹配y前面字符x出现2次
\{m,n\}:指定匹配其前面字符出现至少m次,至多n次,如:grep ”x/{1,5}y“ 表示精确匹配y前面字符x出现最少1次最多5次
\{m,\} : 指定匹配其前面字符至少出现m次,如:grep ”x\{2,\}y“表示精确匹配y前面字符x最少出现2次
\{0,n\}:指定匹配其前面字符至多出现n次,如:grep ”x\{0,3\}y“表示精确匹配y前面字符x最多出现3次
位置锚定元字符:用于指定字符出现的位置
^:锚定行首; 如:grep ^root 表示匹配以单词root开头的行
$:锚定行尾;如:grep /bin/bash$ 表示匹配以/bin/bash 结尾的行
^$:空白行; 如:grep ”^$“ 表示匹配文件中所有的空白行
\<或\b:锚定词首;如 grep ”\<root" 表示精确匹配包含"root“开头的单词的行
>\或\b:锚定词尾;如 grep ”root\>“表示匹配包含”root“结尾的单词的行
分组:\(\);例如grep ”\(ab\)*xy“,表示匹配x前面ab为一组的字符出现任意次
引用:\1;后向引用,引用前面的第一个 左括号以及与之对应的右括号中的模式所匹配到的内容
grep "\(a6b\)xy\1" 表示能够匹配到a6bxya6b
\2:前向引用两次,如 grep "\(a6b\)xy\2" 表示能够匹配到a6bxya6ba6b
egrep:扩展正则表达式,等同于 ”grep -E“,与grep用法大致相同,不过元字符不用转义
字符匹配:
.:任意单个字符
[]:指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
次数匹配:
*:匹配其前面的字符任意次
?:匹配其前面的字符0或1次
+:匹配其前面的字符至少1次
{m}:匹配其前面的字符m次
{m,n}:至少m次,至多n次
{m,}:至少m次
{0,n}:至多n次
锚定;
^:行首
$:行尾
\<,\b:词首
\>,\b:词尾
分组:( )
|:或者;ac|bc表示ac或bc,字符串进行或者匹配
a(c|b)c表示acc或abc,使用分组可以单个字符进行或者匹配