egrep:GNU / Linux中的命令示例

埃格雷普

grep的 它是GNU / Linux命令行上最常用的工具之一。 尽管它是一个非常简单的工具,但它允许您执行大量操作。 它特别与管道一起使用,以便能够在先前命令的输出等中定位特定点。 但是,还有一个名为egrep的工具,等效于使用-E选项运行grep。

e来自“扩展的正则表达式”,这是激活-E选项的功能,默认情况下,您在egrep中具有的功能而不使用该选项。 也就是说,您可以使用 扩展正则表达式。 在本教程中,我将不解释正则表达式是什么,如何使用它们以及* nix中的类型。 我将仅展示一些可以使用egrep进行的有用操作的实际示例...

grep,egrep和fgrep相似。 实际上,egrep等效于grep -E,fgrep等效于grep -F。 也就是说,在涉及到我们的情况下,它也会将模式解释为正则表达式。

搜索行或单词 在一个或多个文件中,grep也是如此。 例如,假设您要在名为snap.txt的文件以及当前目录中的所有.txt文件中搜索ubuntu词:

egrep ubuntu snap.txt

egrep ubuntu *.txt

搜索也可以 递归的 要搜索当前目录的全部内容:

egrep -r "hola mundo" *

到目前为止,已经搜索了准确的单词或字符串,即考虑到大小写(区分大小写),但是如果您要在不区分大小写的模式下进行搜索, 无论是大写还是小写,则可以使用以下内容(如果添加w只会找到完全匹配项):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

显示,不是巧合,而是 找到这些匹配项的文件名:

egrep -l hola *.txt

仅显示图案或文字 在文档中搜索:

egrep -o printf hola.c

请记住,您可以利用所有可以想象的可能性。 您可以合并先前看到的几个选项,也可以用其他选项(例如-A n和-B n)进行补充,其中n 您要在(之前)之前和之后(之后)显示的行数 或同时在两者(C)中显示,以了解比赛周围的情况:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

禁止包含匹配项的行,仅显示不匹配的行:

egrep -v "dos" números.doc

或者,如果您愿意,可以使用 多个单词或与-e匹配。 例如:

egrep -v -e "uno" -e "dos" -e "tres" números.txt

如果你使用 -c只能计算匹配数,或使用-v反转以显示不匹配的行数。 例如:

egrep -c "include" main.c

egrep -v -c "include" main.c

乃至 显示行号 匹配发生的位置以及它分别占据的位置:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

以及 常用表达 它的功能可以扩展。 例如,找到一行以Hello开头并以bye结尾的行,或者以Hello开头的行,后跟任意一行,然后分别出现匹配bye:

*对以下命令的更正:由于读者Manuel Alcocer的评论,由于出现错误,我得以修改以下命令。

egrep '^Hola.*adiós$' ejemplo.txt

egrep "Hola.*adiós" ejemplo.txt

但是,如果您想知道与grep的区别,那么以下示例将使您很清楚...如果在不带-E的情况下使用grep,则应使用 转义序列 这样就可以解释特殊字符,否则就可以不考虑特殊字符就解释模式。 另一方面,使用egrep或grep -E会将它们考虑在内。 例如:
grep '^no\(fork\|group\)' /etc/group

那等于:

grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group

也就是说,它将查找以nofork或nogroup开头的匹配行。 但是,如果您使用的是grep的第一个表达式而没有转义序列,那么它将执行搜索 具体模式 否(前叉|组):

grep 'no(fork|group)' /etc/group

您也可以搜寻 字母数字范围或特定值,例如用于定位某些IP:
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks

如果愿意,可以使用其他正则表达式进行更具体的搜索。 例如找一个 巧合或其他:

egrep -i '^(printf|scanf)' hola.c

您甚至可以找到 大写,小写,仅字母字符或字母数字等。,使用其他表达式,例如:[:alnum:],[:alpha:],[:digit:],[:lower:],[:print:],[:punct:],[:space:],[ :上部:],等等。 例如,要搜索大写字母:
egrep [[:upper:]] diccioario

希望对您有所帮助...很快,我将在专门针对它的文章中解释正则表达式...


5条评论,留下您的评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   曼努埃尔·阿尔科塞(Manuel Alcocer)

    下午好。

    几句话...

    您解释了“ egrep”命令,但不要放在“ egrep”和“ grep”之间的区别,这应该在这里。

    例如:
    使用grep:ip -4 a | grep'[0-9] \ +'
    使用egrep:ip -4 a | egrep'[0-9] +'

    嗯,这是错误的,'egrep“ Hello。* Bye” example.txt'; 当文件中有一行包含字符串“ Hello”,后跟“ every”和“ goodbye”的行时,成功就可以实现,该行可以以任何东西开头和结尾。

    这就是文章所说的:
    egrep'^你好*再见$'example.txt

    并且所有选项,或者几乎所有选项(我不停地检查它)都是'grep'选项,而不是'egrep'选项。

    最好的问候。

    1.    艾萨克

      感谢您报告该错误。 您对正则表达式的评论,我已经在第二段中提到了。 我将为他们专门写一篇文章,因为有很多文章,而这篇文章将花费很长时间。 一声问候!

      1.    曼努埃尔·阿尔科塞(Manuel Alcocer)

        再次问好,以撒。

        在第二段中,您基本上说了,或者应该说,“ egrep”是“ grep -E”的别名,但是您没有提供任何将“ egrep”用于正则表达式的示例,该正则表达式与由'grep'使用。

        专为解释扩展的正则表达式而设计的文章对我来说似乎是个大胆的尝试,因为诸如此类的网站不会做广告,并且正在对GNU社区进行非常重要的信息工作: https://www.rexegg.com/

        我不是在这里写拖钓,我的意图是,如果某人阅读此条目以了解“ egrep”或“ grep”的作用,请查看其他来源,该条目不能引用任何内容,它解释说很少,很糟糕,它提供了多余的信息,并且可能造成混乱,特别是对于那些不了解GNU及其提供的强大工具的人。

        最后,您已经添加并修复了我在第一条评论(^ $)之后指出的错误。 与在其他站点中一样,您应该引用做出更正的人,或者至少说这是更正,它是GNU基础的一部分,该基础与本博客的创建基础相同,但已经丢失。

        问候。

        1.    艾萨克

          感谢您的观点。

  2.   FSAFs

    FFSAF