我在后台运行了一个能够返回当前系统数据/统计信息的Linux驱动程序。我通过在控制台中运行控制台实用程序(让我们称之为 dump-data )来查看数据。每次运行 dump-data 时,都会转储所有数据。该实用程序的输出如下所示
Output:
- A=reading1
- B=reading2
- C=reading3
- D=reading4
- E=reading5
...
- variableX=readingX
...
该实用程序返回的读数列表可能非常长。根据情况,某些读数将是有用的,而其他一切都是无用的。
我需要一种方法来只查找名称可能没有任何共同点的有用读数(通过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,因为这实际上会给我三次单独调用转储数据的读数,因为这不准确。
答案 0 :(得分: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
个结果保存到文件中,然后再将其保存。
TEMP=$(mktemp /tmp/dump-data-XXXXXXXX)
dump-data > ${TEMP}
grep A ${TEMP}
grep B ${TEMP}
grep C ${TEMP}
答案 1 :(得分:2)
您可以使用dump-data | grep -E "A|D|E"
。注意grep的-E
选项。或者,您可以使用egrep
而不使用-E
选项。
答案 2 :(得分:1)
你可以简单地使用:
dump-data | grep -E 'A|D|E'
答案 3 :(得分:0)
awk '/MY PATTERN/{print > "matches-"FILENAME;}' myfile{1,3}