如何同时grep多行(从另一个命令输出)?

peo*_*les 2 linux bash scripting grep

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

Output:
- A=reading1
- B=reading2
- C=reading3
- D=reading4
- E=reading5
...
- variableX=readingX
...
Run Code Online (Sandbox Code Playgroud)

该实用程序返回的读数列表可能会很长。根据情况,某些读数将是有用的,而其他一切都将是无用的。

我需要一种方法来仅对有用名称的grep有用(仅通过bash脚本)进行grep。即有时我需要收集A,D,E;而其他时候我需要C,D,E。

我试图绘制随时间变化的读数以寻找趋势,所以我无法运行以下内容:

# forgive my pseudocode
Loop
    dump-data | grep A
    dump-data | grep D
    dump-data | grep E
End Loop
Run Code Online (Sandbox Code Playgroud)

收集A,D,E,因为这实际上会使我从3次单独的转储数据调用中读取数据,因为那是不准确的。

Igo*_*bin 5

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

grep -E 'expr1|expr2|expr3'
Run Code Online (Sandbox Code Playgroud)

但是,如果要在单独的文件中获得结果(对于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_
Run Code Online (Sandbox Code Playgroud)

但是命令似乎太复杂了。

我最好将dump-data结果保存到文件,然后grep。

TEMP=$(mktemp /tmp/dump-data-XXXXXXXX)
dump-data > ${TEMP}
grep A ${TEMP}
grep B ${TEMP}
grep C ${TEMP}
Run Code Online (Sandbox Code Playgroud)