grep命令及正则

文本查找

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]

原文地址:https://www.cnblogs.com/isunny/p/5873980.html