【问题标题】:How do I grep multiple lines (output from another command) at the same time?如何同时 grep 多行(另一个命令的输出)?
【发布时间】:2012-07-31 05:07:17
【问题描述】:

我有一个在后台运行的 Linux 驱动程序,它能够返回当前系统数据/统计信息。我通过在控制台中运行控制台实用程序(我们称之为 dump-data)来查看数据。每次我运行 dump-data 时都会转储 所有 数据。该实用程序的输出如下所示

Output:
- A=reading1
- B=reading2
- C=reading3
- D=reading4
- E=reading5
...
- variableX=readingX
...

实用程序返回的读数列表可能非常长。根据具体情况,某些读数会很有用,而其他所有读数都是无用的。

我需要一种方法来仅对名称可能没有任何共同点的有用读数进行 grep(通过 bash 脚本)。 IE。有时我需要收集 A、D、E;其他时候我需要 C、D、E。

我正在尝试绘制随时间变化的读数以寻找趋势,所以我无法运行这样的东西:

# forgive my pseudocode
Loop
    dump-data | grep A
    dump-data | grep D
    dump-data | grep E
End Loop

收集 A、D、E,因为这实际上会给我 3 个单独的转储数据调用的读数,因为那是不准确的。

【问题讨论】:

    标签: linux bash scripting grep


    【解决方案1】:

    您可以使用dump-data | grep -E "A|D|E"。注意 grep 的 -E 选项。或者,您可以使用 egrep 而不使用 -E 选项。

    【讨论】:

      【解决方案2】:

      如果要将所有 grep 的结果保存在同一个文件中,可以将所有表达式合并为一个:

      grep -E 'expr1|expr2|expr3'
      

      但是,如果您希望将结果(针对 expr1、expr2 和 expr3)放在单独的文件中,事情会变得更加有趣。

      您可以使用tee >(command) 执行此操作。

      例如,这里我用三个不同的命令处理同一个管道:

      $ echo abc | tee >(sed s/a/_a_/ > file1) | tee >(sed s/b/_b_/ > file2) | sed s/c/_c_/ > file3
      $ grep "" file[123]
      file1:_a_bc
      file2:a_b_c
      file3:ab_c_
      

      但是这个命令好像太复杂了。

      我最好将dump-data 结果保存到一个文件中,然后用 grep 解析它。

      TEMP=$(mktemp /tmp/dump-data-XXXXXXXX)
      dump-data > ${TEMP}
      grep A ${TEMP}
      grep B ${TEMP}
      grep C ${TEMP}
      

      【讨论】:

      • 感谢您的回答! grep -E 工作正常。我选择了您的答案,因为它提供的内容比其他答案多一点。我确实想到了您的最后一个解决方案,但由于我可能会经常阅读,因此效率可能有点低。
      • 当然可以,但是当您需要为每个表达式单独输出文件时,这是不可避免的 :) 如果不需要,当然不是 :)
      【解决方案3】:

      你可以简单地使用:

      dump-data | grep -E 'A|D|E'
      

      【讨论】:

        【解决方案4】:
        awk '/MY PATTERN/{print > "matches-"FILENAME;}' myfile{1,3}
        

        谢谢GuruStack Exchange

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-08
          • 2018-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多