链接grep命令以返回不同行的值

时间:2017-10-25 10:24:14

标签: search logging grep command-line-interface

我有一个大型日志文件,我目前正在运行两个命令。我搜索日志组然后制作一个过滤后的文件,我在匹配后返回以下3行:

cat testFile.log |grep 'Text I am looking for' -A 3 > filter.txt

然后,一旦我拥有了我的过滤文件,我会扫描该文件,为自己创建一个我想要的值的最终文件:

cat filter.txt | grep -E 'Data\w{7}' -o > final.txt

我的目标是尽可能在一行中执行此操作,因此我可以在脚本中将一堆这些检查包装在一起,这样我就可以跳转并搜索x,y,z,然后在一行中获取一组已完成的文件。为每一个结束。

1 个答案:

答案 0 :(得分:0)

你只需要使用管道。也就是说,UNIX的核心思维方式是将小块组合在一起以创建一个漂亮的工具。

在这种情况下,您必须订购:

grep 'Text I am looking for' -A 3 testFile.log > filter.txt  # 1
grep -E 'Data\w{7}' -o  filter.txt > final.txt               # 2

(注意我删除了cat file | grep '...',因为它与说grep '...' file相同

由于#1的输出是#2,只需使用管道:

grep -A 3 'Text I am looking for' testFile.log | grep -Eo 'Data\w{7}' > final.txt

这样可以防止使用不必要的中间文件。