2

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

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

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

我需要一种方法来仅对名称可能没有共同点的有用读数进行 grep(通过 bash 脚本)。即有时我需要收集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 个单独的转储数据调用的读数,因为这不准确。

4

4 回答 4

5

如果要将 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}
于 2012-08-02T08:45:28.257 回答
2

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

于 2012-08-02T08:45:24.270 回答
1

你可以简单地使用:

dump-data | grep -E 'A|D|E'
于 2012-08-02T08:45:32.493 回答
0
awk '/MY PATTERN/{print > "matches-"FILENAME;}' myfile{1,3}

Stack Exchange上的thx Guru

于 2014-11-16T17:29:35.760 回答