这是我输入的内容,我原本期望只获取用户的日志""
。但我在服务器中获得了整个日志:
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
我应该在这个循环中改变什么才能找到只包含这个关键词的日志?
谢谢。
答案1
该zgrep
命令对于压缩文件中的 grepping 非常有用,并且避免了您需要管道zcat
到grep
。您也不需要使用 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