正则三剑客-grep

先来普及一下基础知识!

^ 匹配行开始,如:/^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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • shell脚本快速入门之-----正则三剑客之一grep用法大全!!!

    egrep 当使用多个表达式双重多重过滤 执行“grep -v‘^KaTeX parse error: Expected group after '^' at ...

    不吃小白菜
  • 正则三剑客-sed

    与grep不同的是,当使用sed匹配字符串的时候如下: #sed -n ‘//‘p file             // 内填写需要匹配的字符串 例如: #s...

    老七Linux
  • 正则三剑客-awk

    awk与前两个不同之处是支持分段处理; #mkdir awk; cp /etc/passwd awk/passwd         //前期准备,创建一个awk...

    老七Linux
  • Linux三剑客之grep

    版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

    耕耘实录
  • Linux 三剑客(1)- grep

    当你有多个正则表达式想同时匹配时,可以用 -e,一个 -e 接一个正则表达式,它们是或的关系,不是与的关系

    小菠萝测试笔记
  • linux三剑客之老三grep

    最骚的就数这个了,不用再下载一堆东西或者打开某个网页在测试正则表达式了,比如校验json、校验邮箱。一个grep就搞定,是不是很方便呢?

    机智的程序员小熊
  • 文本过滤之grep,egreo及fgrep 三剑客及正则表达式

    关于grep,egrep以及fgrep,是我们linux服务器中常用的文本过滤工具。掌握好这三个工具并结合正则表达式,对我们日后的运维工作有很大的帮助。 1.g...

    小小科
  • Linux三剑客之grep简介

    grep,sed和awk被称之为linux三剑客,后面两个在文章中都写过一些,今天先简单写写grep这个命令。

    AsiaYe
  • Linux三剑客命令之Grep

    同样可以配合正则表达式来搜索文本,并将匹配的行打印输出,也可用于过滤与搜索特定字符串,使用十分灵活

    民工哥

扫码关注云+社区

领取腾讯云代金券