网络运营

Grep命令的使用

一、简述:

作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的。

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

二、语法

Grep [选项]“关键字”[文件]

三、选项

-a :将 binary 文件以 text 文件的方式搜寻数据

-i :忽略大小写(ignore case)。

-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

-n :显示行号

-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker

-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

-o :只显示被模式匹配到的字符串。

–color:将匹配到的内容以颜色高亮显示。

-A  n:显示匹配到的字符串所在的行及其后n行,after

-B  n:显示匹配到的字符串所在的行及其前n行,before

-C  n:显示匹配到的字符串所在的行及其前后各n行,context

-E: 需要使用”或”匹配的时候使用-E

四、常用关键字

1、直接输入匹配的字符串;

(1)比如我要匹配一下passwd文件中包含root关键字行:

grep –color “root”  /etc/passwd

(2)比如我要匹配一下passwd文件中包含root或者ssh的关键字的行

grep –color -E “root|ssh” /etc/passwd

不加-E参数是匹配不出任何信息的

2、使用基本正则表达式,下面谈关于基本正则表达式的使用:

(1)匹配字符:

. :任意一个字符。

[abc] :表示匹配一个字符,这个字符必须是abc中的一个

[a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个

[^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符

[0-9] :表示匹配一个数字,这个数字必须是0-9中一个

[A-Za-z0-9]:大小写字母和数字综合匹配

对于一些常用的字符集,系统做了定义:

[A-Za-z] 等价于 [[:alpha:]]

[0-9] 等价于 [[:digit:]]

[A-Za-z0-9] 等价于 [[:alnum:]]

tab,space 等空白字符 [[:space:]]

[A-Z] 等价于 [[:upper:]]

[a-z] 等价于 [[:lower:]]

标点符号 [[:punct:]]

举例:

匹配四个字符r开头中间两个任意字符r结尾

grep –color  “r..t”  /etc/passwd

匹配包含abc其中一个字符

grep –color  “[abc]”  /etc/passwd

匹配包含小写字母的字符

grep –color  “[a-z]”  /etc/passwd

匹配除了小写字母外的字符

grep –color  “[^a-z]”  /etc/passwd

 

(2)匹配次数:

\{m,n\} :匹配其前面出现的字符至少m次,至多n次的行

\? :匹配其前面出现的内容0次或1次,等价于\{0,1\}的行

* :匹配其前面出现的内容任意次,等价于\{0,\}的行

举例:

匹配前面出现的a字符出现0或者1次的行

grep –color  “a\{0,1\}”  /etc/passwd

grep –color  “a\?”  /etc/passwd

匹配前面出现的a字符任意次数的所有行

grep –color  “a*”  /etc/passwd

匹配出现一个或以上字符o的行

grep –color -E  “o{1}”  /etc/passwd

匹配出现两个o字符以上的行

grep –color -E  “o{2}”  /etc/passwd

(3)位置锚定:

^ :锚定行首

$ :锚定行尾。技巧:”^$”用于匹配空白行

\b或\<:锚定单词的词首。如”\blike”不会匹配alike,但是会匹配liker

\b或\>:锚定单词的词尾。如”\blike\b”不会匹配alike和liker,只会匹配like

\B :与\b作用相反。 .* :表述任意字符任意次,即无论什么内容全部匹配

举例:

匹配以a开头的行

grep –color “^a”  /etc/passwd

匹配以n结尾的行

grep –color  “$n”  /etc/passwd

匹配以b开头n结尾的

grep –color -E “^b$n”  /etc/passwd

匹配以b开头或者以a开头的行

grep –color -E “^b|^a”  /etc/passwd

匹配以no开头的单词

grep –color “\no”  /etc/passwd

匹配以in结尾的单词

grep –color “in\b”  /etc/passwd

 

Be the First to comment.

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注

68 views