如何在这个 zcat 循环中只找到特定的关键字?

Sar*_*Bar 4 command-line grep

这是我输入的内容,我希望在"". 但是我已经在服务器中获得了整个日志:

for i in `ls *.log.gz`; do zcat $i |  grep "U2779897722719715411" >> sara.log;  done ; *
Run Code Online (Sandbox Code Playgroud)

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

谢谢你。

Arr*_*cal 9

zgrep命令对于压缩文件中的 grepping 非常有用,并且无需通过管道zcat传输到grep. 您也不需要使用 for 循环通过globbing(shell 模式匹配)创建文件列表。

zgrep U2779897722719715411 *.log.gz >> sara.log
Run Code Online (Sandbox Code Playgroud)

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

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

zgrep -h U2779897722719715411 *.log.gz >> sara.log
Run Code Online (Sandbox Code Playgroud)

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

for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
Run Code Online (Sandbox Code Playgroud)

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

zgrep -l U2779897722719715411 *.log.gz >> sara.log
Run Code Online (Sandbox Code Playgroud)

或者

for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log
Run Code Online (Sandbox Code Playgroud)