加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

grep、egrep及相应的正则表达式用法

发布时间:2020-12-14 04:29:27 所属栏目:百科 来源:网络整理
导读:Linux系统中grep,egrep命令是一种强大的文本搜索工具,它们能使用正则表达式和扩展正则表达式搜索文本,并把匹配到的行打印出来。 搜寻特定字符串"the" 注: n为显示行号 # grep -n "the" regular_express.txt 2.使用-v选项 反向搜寻特定字符串"the" # grep -


Linux系统中grep,egrep命令是一种强大的文本搜索工具,它们能使用正则表达式和扩展正则表达式搜索文本,并把匹配到的行打印出来。


  1. 搜寻特定字符串"the" 注: n为显示行号

# grep -n "the" regular_express.txt


2.使用-v选项反向搜寻特定字符串"the"

# grep -vn "the" regular_express.txt


3.匹配大小写"the"的这个字符串,使用-i选项

# grep -in "the" regular_express.txt


4.[] 表示匹配"[]"范围内的字符串

搜索test或tast这两个单词时,发现他们有共同的't?st',所以可以这么搜寻

# grep -n "t[ae]st" regular_express.tx

注: 大写英文/小写英文/数字 可以使用 [a-z]/[A-Z]/[0-9]等方式来书写,也可以写在一起

[a-zA-Z0-9]表示要求字符串是数字以及英文

如果我们要匹配有数字的那行,例子如下:

# grep -n "[0-9]" regular_express.txt

也可以用

[[:lower:]] 代替a-z

[[:digit:]] 代替0-9

[[:upper:]]:所有大写字母;

[[:lower:]]:所有小写字母;

[[:digit:]]:所有的数字;

[[:alpha:]]:所有字母;

[[:space:]]:空白字符;

[[:punct:]]:标点符号;

范例:匹配以小写字母开头后面跟着两个"oo"字母的字符串

# grep -n "[^[:lower:]]oo" regular_express.txt

匹配以数字结尾的字符串

# grep -n "[[:digit:]$]" regular_express.txt等


5.[^] 表示匹配"[]"范围之外的字符串,例如[^0-9]表示非数字字符,[^A-Z]表示非大写字符范围

如果我们要取得没有数字的那行,则:

# grep -n "[0-9]" regular_express.txt


6.^word表示匹配的字符串(word)在行首

显示行首为"the"的字符串

# grep -n "^the" regular_express.txt

显示行首是小写字符

# grep -n "^[a-z]" regular_express.txt


7.word$表示匹配的字符串(word)在行尾

显示行尾为点 . 的那一行

# grep -n ".$" regular_express.txt

显示空白行

# grep -n "^$" regular_express.txt


8. .号表示匹配1个任意字符

找出g??d字符串,起头g结束d的四个字符串

# grep -n "g..d" regular_express.txt


9. *表示匹配0到无穷多个(正则表达式)前一个字符

"goo*g"代表"gog","goog","gooog"...等

# grep -n "goo*g" regular_express.txt


10. ?表示匹配前面的字符0次或1次

匹配o字符0次或一次

# grep -n "ro?t" regular_express.txt


11. +匹配前面的字符至少一次

匹配至少含有一个o字符的字符串

grep -n "ro+t" regular_express.txt


注: .号代表任意字符,.*则就代表空字符或者一个到N个任意字符

找出含两个g中间含有任意个字符的字符串

# grep -n "g.*g" regular_express.txt


表示转义字符,在特殊字符前加会将原本的特殊字符意义去除

注:{}因为在shell里有特殊意义,所以需要加转意符来让其失去意义


12. {m,n}表示找出n到m个(正则表达式)前一个字符

找出含两个o的字符串

# grep -n "o{2}" regular_express.txt

找出g后含2到5个o然后以g结尾的字符串

# grep -n "go{2,5}g" regular_express.txt


13. {n,}表示n个以上的前一个RE字符

找出g后含2以上的o然后以g结尾的字符串

# grep -n "go{2,}g" regular_express.txt


14. &;或b表示词首锚定

找出以"ro"字符串位于单词首的字符串

# grep -n "ro&;" regular_express.txt

15. &;或b 表示词尾锚定

找出以"ro"字符串位于单词尾的字符串

# grep -n "&;ro" regular_express.txt


egrep支持使用扩展正则表达式,与grep用法基本相同,区别在于egrep除了词尾锚定和词尾锚定

时"<",">"符号要用""来转意,其它符号则不用,

范例:

1. + 表示重复一个或一个以上的前一个RE字符

范例:egrep "go+d" regular_express.txt

表示搜寻(god)(good)(goood)...等等字符串,o+代表[一个以上的o]

2. ? 表示重复零个或一个的前一个RE字符

范例:egrep go?d" regular_express.txt

表示搜寻(gd)(god)字符串,o?代表[空的或1个o]


3. () 表示找出群组字符串

范例:egrep "g(la|oo)d" regular_express.txt

表示搜寻(glad)或(good)字符串


4. ()+ 表示找出多个重复群组的判别

范例: echo "AxyzxyzxyzxyzC"|egrep "A(xyz)+C"

表示搜寻开头是A结尾是C,中间有一个以上的"xyz"字符串


其余用法不在详细举例,可模仿grep用法:


范围匹配:

.号表示匹配任意单个字符

[ ]:匹配范围内的任意单个字符

[^ ]:匹配范围外的任意单个字符

次数匹配:

*:匹配任意次

?:匹配0次或1次

+:匹配1次或多次

{m}:匹配匹配m次

{m,n}:匹配至少m次,至多n次

{0,n}:匹配至少0次至多无限次

{m,}:匹配至少m次

位置匹配:

^ 表示行首锚定

$ 表示行尾锚定

&;或b 表示词首锚定

&;或b 表示词尾锚定

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读