【问题标题】:Search with grep for two expressions at once使用 grep 一次搜索两个表达式
【发布时间】:2013-02-13 12:25:54
【问题描述】:

这是基本的,但我无法用谷歌搜索它。我可以在调用 grep 时使用吗

grep expr1 | grep expr2

让它打印包含 expr1 和 expr2 的行?

【问题讨论】:

标签: bash grep


【解决方案1】:

你所拥有的应该可以工作。

以下是实现相同效果的另一种方法:

grep -E 'expr1.*expr2|expr2.*expr1'

【讨论】:

  • 我知道它有效:-)。我只是厌倦了调用 grep 两次。但似乎只写两次 grep 然后输入它会更快。不幸的是,我经常不知道表达式的顺序。我希望像grep (expr1ANDexpr2) :-) 这样的东西。顺便说一句,这是否比调用 grep 两次更快?
【解决方案2】:

试试这个:

grep 'expr1.*expr2\|expr2.*expr1'

如果您知道“expr2”总是在“expr1”之后,那么这比它需要的要复杂一些。在这种情况下,您可以将其简化为:

grep 'expr1.*expr2'

【讨论】:

  • 而不是有很多相同的问题 - 上面对我有用,除了我做了:` sudo grep -E -rnw '/var/log/' -e 'Out of memory.*Jan 17| Jan 17.*Out of memory'` - 没有反斜杠。 Linux Mint 18.3,GNU bash 4.3.48
【解决方案3】:

您可以提供多个表达式以使用多个-e flags 进行搜索。另见this post

grep -e expr1 -e expr2

【讨论】:

  • @sup:在 GNU grep 2.16 中,建议的命令行搜索两个表达式
  • 我正在运行 GNU GREP 2.25 并运行 grep --version |grep -e is -e software 似乎不会搜索包含这两个表达式的行,但它会搜索包含任一表达式的行。
【解决方案4】:

实际上,如果您想获得包含这两个表达式的行,您自己的建议几乎是正确的。使用:

grep expr1 somefile | grep expr2

【讨论】:

  • 哦,我正常使用cat somefile | grep expr1 | grep expr2,但我认为我使用哪个软件来传输这些东西并不重要:-)。
  • 这将进行“与”而不是“或”运算,不是吗?
  • 您也可以使用grep < somefile expr1 | grep expr2,因为我们正在玩“我可以用多少种方式做同样的事情”的游戏。
  • @RicardPérezdelCampo OP 想要“和”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 2014-01-02
相关资源
最近更新 更多