使用前一个 grep 的结果进行 grepping

新手上路,请多包涵

有没有办法根据前一个 grep 的结果执行 grep,而不仅仅是将多个 grep 相互传递。例如,假设我有以下日志文件输出:

 ID 1000 xyz occured
ID 1001 misc content
ID 1000 misc content
ID 1000 status code: 26348931276572174
ID 1000 misc content
ID 1001 misc content

首先,我想 grep 整个日志文件文件,看看是否存在“xyz 发生”。如果是,我想获取该事件的 ID 号,并通过 grep 遍历文件中具有该 ID 号的所有行来查找状态代码。

我想象我可以使用 xargs 或类似的东西,但我似乎无法让它工作。

 grep "xyz occured" file.log | awk '{ print $2 }' | xargs grep "status code" | awk '{print $NF}'

关于如何实际执行此操作的任何想法?

原文由 Sonoman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 641
2 个回答

您快到了。但是,虽然 xargs 有时可以用来做你想做的事(取决于下一个命令如何接受它的参数),但你实际上并没有使用它来 grep 你刚刚提取的 ID。您需要做的是获取第一个 grep 的输出(包含 ID 代码)并在下一个 grep 的表达式中使用它。就像是:

 grep "^ID `grep 'xyz occured' file.log | awk '{print $2}'` status code" file.log

显然,另一种选择是编写一个脚本一次性完成此操作,a-la Ed 的建议。

原文由 Andy Ross 发布,翻译遵循 CC BY-SA 3.0 许可协议

grep-ing grep-ed 输出的一般答案:

 grep 'patten1' *.txt | grep 'pattern2'

请注意,第二个 grep 没有指向文件。

更多关于酷 grep 的东西 在这里

原文由 B.Kocis 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题