欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > linux >内容正文

linux

Linux之grep

发布时间:2025/3/20 linux 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Linux之grep 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

  • 首先介绍一些特殊符号,仅列出常用的几个
  • 注意:以中括号的形式,表示一个整体

    grep用法讲解

    grep (global search regular expression and print the line),以行为单位进行信息的提取和分析

    [root@localhost ~]grep [-acinv] [--color=auto] '查找的字符串' filename

    参数解析:

    -a 将binary文件以text文件的方式查找数据

    -c 计算找到   '查找字符串' 次数

    -i 忽略大小写,所有的大小写视为一样

    -n输出行号

    -v 反向选择,即显示出没有  '查找字符串'  内容的那一行

    --color=auto 将关键部分加上颜色显示,由于高亮提取的数据可以使人一目了然,因此为了永久有效,可以在 ~./bashrc  内容里修改,加上alias grep='grep --color=auto'


    再以source命令使其立即生效



    此外关于grep的还有的其他用法

    [root @localhost ~]# grep [-A] [-B] [--color=auto] '查找字符串' filename

    参数解析:

    -A 后面可以加数字,为after之意,-A5表示第5行到最后一行都会表示出来

    -B 后面可以加数字,为befer之意,-B5,表示首行到第5行都会表示出来


    表示关键字 'root'所在行的前2行与'root'所在行的后3行都会被显示出来

    关于正则表达式的练习:

    1、利用中括号  [ ]  查找字符集合

    如果查找的 test 和 tast ,不难发现这个两个字符串的的区别是e和a,因此

    [root @localhost tmp] # grep -n 't[ae]st' re.txt


    关于 [] 里面无论有几个字符,都表示只取其中的一个字符

    如果想查找 'oo' 的字符时,可以

    [root @localhost tmp]# grep -n 'oo' re.txt

    此时会找出所有含有oo的字符串的行并予以显示


    如果不想要goo形式开头的字符串的行,可以

    [root @localhost tmp]#grep -n '[^g]oo' re.txt

    注意这里的不以 g 开头的字符串,是 [^g]的形式


    这里10和11行中之所以还有goo 的形式,因为 oo 前还有o,即至少3个o

    现在找出oo前无小写字母,使用反向选择字符 ^

    [rrot @localhost tmp]# grep -n '[^a-z]oo' re.tx

    或者:获取oo前无小写字母的形式

    [root @localhost tmp] #grep -n '[^[:lower]]'oo' re.txt


    对比行首字符 ^:

    [root @localhost tmp] # grep -n '^[a-z]' re.txt找出开头是小写字母+oo的形式

    所以一定注意反向选取 ^ 和 行首字符 ^,这里个符合一样的,但是放置的位置不同,决定了其意义不同,在[^]表示反向选择,^[]表示行首的意思

    在一组字符集合中,如果该字符是连续式,可以使用如[0-9][A-Z][a-z]等方式来书写

    [root @localhost tmp]# grep -n '[0-9]' re.txt

    当然也可以使用特殊字符表示方法

    [root @localhost tmp] # grep -n '[[:digit:]]' re.txt



    2、行尾字符 $

    想要查找以 .为行尾的那一行

    [root @localhost tmp] #grep -n '\.$' re.txt

    注意这里之所以 \. ,是因为 . 还有其他含义,这里使用转义字符使其成为普通字符

    显示空白行

    [root @localhost tmp]# grep '^$' re.txt

    3、任意一个字符 . 和重复字符*

    在bash中,知道通配符* 可以用来表示0个或任意个字符,但是正则表达式不是通配符,两者之间是不同的,正则表达式中 “.”表示肯定有一个任意字符,* 表示重复前一个字符 0次或者多次,为组合形态

    [rroot @localhost tmp]# grep -n 'g..d' re.txt

    表示在字母g和d之前一定有两个字符


    查找至少含有两个 o,即 oo的字符串的行,注意 o* 表示具有空字符或者一个以上的o,因此两个oo,则要表示为 ooo*,一定要注意


    所以, .* 表示0个或者任意多个字符


    在 g 和 g 之前的所有字符串所在的行都表示出来

    正确理解 [0-9][0-9]* 与 [0-9] 的含义


    4、限定连续re字符范围{}

    如果想找到2-5的o连续字符串,此时需要用到限定范围的字符{},因为 “{” 和 “}”的符号在shell中石油特殊含义的,因此这里需要转义 \ 使其失去特殊意义,这里找到两个o

    [root @localhost tmp]# grep -n 'o\{2\}' re.txt

    找到2个到5个的o字符

    [root @localhost tmp]# grep -n 'o\{2,5\}' re.txt

    如果是找到2个以上的o怎么办呢?

    [root @localhost tmp]# grep -n 'o\{2,\}' re.txt


    如果要去掉空白行和以#开头的注释行

    [root @localhost tmp]#grep -n '^$' re.txt | grep -n '^#'

    使用grep进行两次查找,如果使用扩展性表达式,则可以进行一次性操作就可以,大大简化了操作,这里是 egrep

    [root @localhost tmp]#egrep -v '^$ | #' re.txt

    这里介绍几种常见的扩展性正则表达式的用法

    a.   +     重复一个或一个以上的钱一个RE的字符,如果查找god,good,goood,发现o为一个以上,因此可以使用o+

    [root @localhost tmp]#egrep -n 'go+d' re.txt

    b.  ?      零个或一个的前一个RE字符

    [root @localhost tmp]# egrep -n 'go?d' re.txt

    上述两种用法,不难发现两者的和为  'go*d' 的形式

    c.    |       或的形式,找出数个字符串,查找 god 和 good 两个字符串

    [root @localhost tmp]#egrep -n 'gd|good' re.txt

    d.   ()       找出组字符串,如果想要找出 god 和 glad ,由于差别在 o 和 la,因此结合 | 的用法

    [root @localhost tmp]#egrep -n 'g(o|la)d' re.txt

    e.   ()+    多个重复组的判别,查找AxyxyxyxyxyzC,发现xy一直在重复,因此

    [root @localhost tmp]#egrep -n 'A(xy)+zC' re.txt





    总结

    以上是生活随笔为你收集整理的Linux之grep的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。