文本查找
grep,egrep,fgrep
grep :Global Research
根据模式搜索文本,并将符合模式的文本行显示出来
模式:Pattern,文本字符和正则的元字符组合而成匹配条件
grep 'root' /etc/passwd
-i :ignore case,忽略大小写
--color,高亮输出
-v:反向匹配,显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串
*:任意长度的任意字符
?:任意单个字符
[]:
[^]:指定范围外的
正则:Regular Expression,RegExp
元字符:
. :匹配任意单个字符
grep 'r..t' /etc/passwd
[] :匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
字符集:[:digit:],[:lower:],[:upper:],[:punct:],[:space:],[:alpha:],[:alnum:]
匹配次数(贪婪模式):
* :匹配其前面的字符任意次
a*b
a.*b
a?b
.* :任意长度的任意字符
? : 匹配其前面的字符1次或0次
{m,n} :匹配其前面的字符至少m次,至多n次
{1,} :至少1次
{0,3}:0~3次
grep 'a{1,}b' test.txt :a至少1次,接b
位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
grep '^r..t' /etc/passwd
$:锚定行尾,此字符前面的任意内容必须出现在行尾
grep 'w$' /etc/inittab :以w结束的行
grep 'b..h$' /etc/inittab :以 b..h结尾的行
^$:空白行
grep '^$' /etc/inittab :匹配空白行
grep '[[:digit:]]$' /etc/inittab :以数字结尾的行
grep '[[:space:]]$' /etc/inittab :以空白字符结尾的行
<或 :其后面的任意字符必须作为单词的首部出现
>或 :其前面的任意字符必须作为单词的尾部出现
<root>
grep 'root>' test2.txt :root出现在词尾
grep '<root' test2.txt :root出现在词首
分组:
()
(ab)*
grep '(ab)*' test.txt :ab出现任意次
后向引用
1:引用第1个左括号以及与之对应的右括号所包括的所有内容
2:
3:
grep '(l..e).*1' test.txt :前面匹配l..e ,后面引用l..e
行中出现任意一数字([0-9]),中间跟任意字符.*,行尾以相同数字结尾1$
grep '([0-9]).*1$' /etc/inittab :前面匹配[0-9] ,后面引用[0-9]