繁体   English   中英

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

[英]How do I grep multiple lines (output from another command) at the same time?

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

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,因为这实际上会给我3个单独的转储数据调用的读数,因为这是不准确的。

如果要将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}

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

你可以简单地使用:

dump-data | grep -E 'A|D|E'
awk '/MY PATTERN/{print > "matches-"FILENAME;}' myfile{1,3}

堆栈交换中的 大师

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM