如何在此 zcat 循环中仅找到特定的关键词?

如何在此 zcat 循环中仅找到特定的关键词?

这是我输入的内容,我原本期望只获取用户的日志""。但我在服务器中获得了整个日志:

for i in `ls *.log.gz`; do zcat $i |  grep "U2779897722719715411" >> sara.log;  done ; *

我应该在这个循环中改变什么才能找到只包含这个关键词的日志?

谢谢。

答案1

zgrep命令对于压缩文件中的 grepping 非常有用,并且避免了您需要管道zcatgrep。您也不需要使用 for 循环来创建文件列表通配符(外壳模式匹配)。

zgrep U2779897722719715411 *.log.gz >> sara.log

该命令将输出文件名和包含 U2779897722719715411 的行,并以:字符分隔。

如果您不想要文件名前缀,您可以使用-h以下选项zgrep

zgrep -h U2779897722719715411 *.log.gz >> sara.log

这也可以通过循环来实现,但避免使用ls,并在循环完成后执行对文件的重定向:

for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log

或者,如果您只想要包含该用户字符串 U2779897722719715411 的文件的文件名,则可以在上述任一命令中使用该-l选项:zgrep

zgrep -l U2779897722719715411 *.log.gz >> sara.log

或者

for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log

相关内容