使用先前grep的结果进行grepping

Son*_*man 15 linux grep

有没有办法根据以前的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
Run Code Online (Sandbox Code Playgroud)

首先,我想grep整个日志文件文件,看看是否存在"xyz occured".如果是,我想获取该事件的ID号,并通过该ID号查找状态代码来查找文件中的所有行.

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

grep "xyz occured" file.log | awk '{ print $2 }' | xargs grep "status code" | awk '{print $NF}'
Run Code Online (Sandbox Code Playgroud)

关于如何实际做到这一点的任何想法?

B.K*_*cis 24

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

grep 'patten1' *.txt | grep 'pattern2' 
Run Code Online (Sandbox Code Playgroud)

注意第二个grep没有指向文件.

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


And*_*oss 6

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

grep "^ID `grep 'xyz occured' file.log | awk '{print $2}'` status code" file.log
Run Code Online (Sandbox Code Playgroud)

显然,另一个选择是编写一个脚本来执行此操作,a-la Ed的建议.