前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则三剑客-grep

正则三剑客-grep

作者头像
老七Linux
发布2018-05-09 15:19:09
6530
发布2018-05-09 15:19:09
举报

先来普及一下基础知识!

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。

$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。

. 匹配一个非换行符的任意一个字符,如:/s.d/匹配s后接一个任意字符,最后是d。

* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

? 匹配0个或一个字符,如:ro?t   可以匹配 rt ;rot 。

+ 匹配1个或多个字符,如:ro?t    可以匹配 rot;root;rooot;roooooooooooot

[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。

[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。

& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

\< 匹配单词的开始,如:/\ 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。

x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。

x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。

x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。


grep [-cinvABC] ‘word’ filename

# grep -A2 ‘root’ passwd

-A 后面跟数字,过滤出符合要求的行以及下面n行

-B 同上,过滤出符合要求的行以及上面n行

-C 同上,同时过滤出符合要求的行以及上下各n行

Centos 7开始系统自动增加了别名alias grep=’grep –color=auto’ 所以当筛选后一般都会呈现红色

# grep -c ‘root’ passwd               c:行数 //显示带有root关键字的行有多少行

# grep -n ‘nologin’ passwd           n:显示行数                 //显示带有nologin在原文中的段落号码

# grep -ni ‘nologin’ passwd                 i:不区分大小写                       //不区分nologin的大小写

# grep -niv ‘nologin’ passwd         v:取反           //找出不带有nologin的行

#grep -r ‘root’ /etc               -r:遍历所有子目录   //查找所有目录以及子目录文件中的 root 字符

# grep -w “bash” passwd      -w:精准匹配(例如在一个文本中有很多abc, abc1,abcaa,abc2;但我只需要abc,我们就需要-w 精准匹配)

grep/egrep示例

# grep ‘[0-9]’/etc/inittab      //匹配括号内的任意一个数字

# grep -v ‘[0-9]’/etc/inittab                   //匹配不带数字的行

# grep -n ‘^#’ /etc/inittab                  //以#开头的行

# grep -v ‘^#’ /etc/inittab                          //不以#开头的行

# grep ‘[^0-9]’ test.txt                  //非数字的行(只要不是数字,任何一个字符都可以匹配)

# grep ‘^[^0-9]’ test.txt                         //以非数字开头的行

# grep ‘[^a-z]’ test.txt               //非小写字母的行(只要不是小写字符,任何一个字符都可以匹配)

# grep ‘^[^0-9a-zA-Z]’ test.txt                   //非数字和字母开头的行,(匹配特殊字符)

^ 放在  []  里面是 取非 ^ 放在  [] 外面是  以…开头

# grep ‘r.o’ test.txt                . 任意一个字符

# grep ‘oo*’ test.txt                 * 左边的字符重复零次或多次

# grep ‘.*’ test.txt                      .* 任意一个任意字符

# grep ‘o\{2\}’ /etc/passwd                //匹配oo 两次的行; 并且使用脱意符号脱意 \{\}

# egrep ‘o{2}’ /etc/passwd               //egrep=grep -E,不需要脱意即可

# egrep ‘o+’ /etc/passwd 匹配 + 前面的字符一次或多次

# egrep ‘oo?’ /etc/passwd 匹配 ? 前面的字符0次或1次

# egrep ‘root|nologin’ /etc/passwd                    //匹配root或nologin的行

# egrep ‘root|nologin|1000’ /etc/passwd                    //匹配root或nologin或1000的行

# egrep ‘(oo){2}’ /etc/passwd                     //匹配 出现oo两次的行

总结:

.             //任意一个字符

.*              //匹配任意个任意字符

?                 //匹配 ? 左边的字符0次或1次

*          //匹配 * 左边的字符重复0次或多次

+           //匹配 + 左边的字符1次或多次

|               //  或者

^    放在 [] 里面是 取非           ^ 放在 [] 外面是 以…开头

例如:

^  锚定行的开始 如:’^grep’匹配所有以grep开头的行。

$  锚定行的结束 如:’grep$’匹配所有以grep结尾的行。

.   匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。

*  匹配零个或多个先前字符 如:’ *grep’匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[] 匹配一个指定范围内的字符,如'[Gg]rep’匹配Grep和grep。

[^]  匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep’匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。

egrep=grep -E:

#egrep ‘root|nologin|1000’ /etc/passwd = #grep -E ‘root|nologin|1000’ /etc/passwd

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/07/03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先来普及一下基础知识!
  • grep/egrep示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档