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

grep命令、正则表达式、位置锚定、单词锚定

发布时间:2020-12-14 01:25:11 所属栏目:百科 来源:网络整理
导读:grep:根据模式,搜索文本,将匹配的行显示出来 语法:grep [OPTIONS] PATTERN [FILE...] PATTERN:将文本字符和正则表达式的元字符组合成的匹配条件 如:grep 'root' /etc/passwd,查找出文件中包含'root'字符的行。 OPTIONS: --color:将匹配到的串用高亮

grep:根据模式,搜索文本,将匹配的行显示出来

语法:grep [OPTIONS] PATTERN [FILE...]

PATTERN:将文本字符和正则表达式的元字符组合成的匹配条件

如:grep 'root' /etc/passwd,查找出文件中包含'root'字符的行。

OPTIONS:

--color:将匹配到的串用高亮颜色显示出来

如:grep --color 'root' /etc/passwd

另:alias grep='grep --color',可定义为别名

-i,--ignore-case

Ignore case distinctions in both the PATTERN and the input files.

忽略模式匹配大小写

如:

[root@station01~]#grep-i'Root'/etc/passwd
root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash
operator:*:11:0:operator:/root:/sbin/nologin

-v:显示没有被模式匹配到的行

-o:只显示被模式匹配到的字符串,并且每个串显示为一行

-E:扩展正则表达式

-A NUM:显示匹配到行的后NUM行,即After

[root@station01~]#grep--color-A3'cpuMHz'/proc/cpuinfo
cpuMHz:2128.040
cachesize:4096KB
fdiv_bug:no
hlt_bug:no

-B NUM:显示匹配到行的前NUM行,即Before

[root@station01~]#grep--color-B3'cpuMHz'/proc/cpuinfo
model:26
modelname:Intel(R)Xeon(R)CPUE5506@2.13GHz
stepping:5
cpuMHz:2128.040

-C NUM:显示匹配到行的前后NUM行,即Context

[root@station01~]#grep--color-C3'cpuMHz'/proc/cpuinfo
model:26
modelname:Intel(R)Xeon(R)CPUE5506@2.13GHz
stepping:5
cpuMHz:2128.040
cachesize:4096KB
fdiv_bug:no
hlt_bug:no


如:

[root@station01~]#grep-o'root'/etc/passwd
root
root
root
root

通配字符:

globbing:

*:任意长度的任意个字符

?:任意单个字符

[]:指定范围内的字符

[^]:指定范围外的字符

正则表达式:Regular Expression,REGEXP,由不表示字符本身意义的元字符组成


元字符:

.:匹配任意单个字符

如:查找以r开头t结尾中间是任意两个字符的字符串

[root@station01~]#grep--color'r..t'/etc/passwd
root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash
operator:*:11:0:operator:/root:/sbin/nologin
ftp:*:14:50:FTPUser:/var/ftp:/sbin/nologin

*:表示匹配其前面的字符任意次数,即0到无穷次

如:

test2.txt文件中的内容如下:

a
b
ab
aab
aaab
acb
addb
amnb


结果:

[root@station01~]#grep--color"a*b"./test2.txt
b
ab
aab
aaab
acb
addb
amnb


.*:表示任意长度的任意字符

如:

结果:

[root@station01~]#grep--color"a.*b"./test2.txt
ab
aab
aaab
acb
addb
amnb



默认情况下正则表达式工作在贪婪模式下,即尺可能多的匹配


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

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

[:alnum:]所有字符,[:alpha:]所有字母,[:cntrl:],[:digit:]所有数字,[:graph:],[:lower:]小写字母,[:print:],

[:punct:]符号,[:space:]空白字符,[:upper:]大写字母,[:xdigit:]

如:test2.txt文件

[root@station01~]#cattest2.txt
a
b
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb

执行结果:

[root@station01~]#grep--color"a.*b"./test2.txt
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb


正常应该匹配到第一个amb即可

?:匹配其前字符0次或1次,注意模式中?号防需要转义,即?

如:

结果:

[root@station01~]#grep--color"a?b"./test2.txt
b
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb


整个串中有部分匹配

{m,n}:匹配其前字符至少m次,至多n次

如:

{1,}:至少1次

{,5}:至多5次

查找a至少出现1次,至多3次,结尾是b的字符串

结果:

[root@station01~]#grep--color"a{1,3}b"./test2.txt
ab
aab
aaab
ambbmnbaaafbaaabadffb

查找a开头b结尾,中间出现至少1个最多3个的任意字符

[root@station01~]#grep--color"a.{1,3}b"./test2.txt
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb



位置锚定

^:行首锚定,此字符后的任意字符出现在行首

查找/etc/passwd文件中以r开头,以t结尾,中间出现任意两个字符的字符串,且出现在行首

结果:

[root@station01~]#grep--color'^r..t'/etc/passwd
root:$6$yA.3HL1hnKwnfKxO$3Z05q4552ogFjS.LtwgL03d//Svp.Aoud/4GbN8ny/XZEvhv/WxTBtV9mmf5zirQWtblMuufvaxDDz8Tr1ABo1:0:0:root:/root:/bin/bash

$:行尾锚定,此字符前的内容必须出现在行尾

查找/etc/inittab中以w结束的行

结果:

[root@station01~]#grep--color'w$'/etc/inittab
#Forinformationonhowtowriteupstarteventhandlers,orhow


^$:空白行

查找/etc/inittab中的空白行

[root@station01~]#grep'^$'/etc/inittab|wc-l
2

查找以数字结尾的行

[root@station01~]#grep--color'[[:digit:]]$'/etc/inittab
#5-X11


单词锚定

&;:其后面的字符必须作为单词的首部出现,也可b

&;:其前的字符必须作为单词的尾部出现,也可b

&;root&;:root必须作为一行的单词出现,也可brootb


如文件test3.txt文件内容如下:

[root@station01~]#cattest3.txt
rootisadministrator.
adminisarooter.
adminrooteriswrong.
heisheroot

查找root出现在词首的行

结果:

[root@station01~]#grep--color'&;root'test3.txt
rootisadministrator.
adminisarooter.

查找root出现在词尾的行

结果:

[root@station01~]#grep--color'root&;'test3.txt
rootisadministrator.
heisheroot


查找以一个单词出现的行

结果:

[root@station01~]#grep--color'&;root&;'test3.txt
rootisadministrator.
[root@station01~]#grep--color'brootb'test3.txt
rootisadministrator.


分组

():将一串字符看成一个整体

查找以ab为一个整体出现的行

文件内容如下:

[root@station01~]#cattest2.txt
a
b
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb

执行结果:

[root@station01~]#grep--color'(ab)*'test2.txt
a
b
ab
aab
aaab
acb
addb
amnb
ambbmnbaaafbaaabadffb

后向引用:前面出现的字符串,后面引用

1:引用第一个左括号和第一个右括号所包括的内容

2:同上,只不过是第二个

3:同上,只不过是第三个

测试文件内容如下:

[root@station01~]#cattest4.txt
helikehislover
sheloveherliker
helikehisliker
sheloveherlover

执行结果:

查找以l开头,e结尾,中间跟两个任意字符的行

[root@station01~]#grep--color'l..e'test4.txt
helikehislover
sheloveherliker
helikehisliker
sheloveherlover

查找以l..e开头并以l..e结尾中间跟任意个字符的行

[root@station01~]#grep--color'(l..e).*1'test4.txt
helikehisliker
sheloveherlover

查找/etc/inittab中前面是任意数字,并以此数字结尾的行

[root@station01~]#grep--color'([0-9]).*1$'/etc/inittab
#5-X11



2015年2月16日于银川

GB-2312

(编辑:李大同)

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

    推荐文章
      热点阅读