Bash 改进了zgrep搜索和while搜索

Bash 改进了zgrep搜索和while搜索,bash,Bash,我有一个18位字符串的列表,我想从日志中删除这些字符串。我现在使用它的方式是,脚本获取一个字符串,然后按小时保存日志并与之一起运行。问题是,这需要很长时间,我需要帮助改进它 do while read x ; do echo $x && zgrep $x /logs/location/app*2019$y* ; done < file_$y > logs_$y ; done 我有一个想法,脚本将采用8位数字,并将它们插入zgrep location/app*此处$y

我有一个18位字符串的列表,我想从日志中删除这些字符串。我现在使用它的方式是,脚本获取一个字符串,然后按小时保存日志并与之一起运行。问题是,这需要很长时间,我需要帮助改进它

do while read x ;
do echo $x && zgrep $x /logs/location/app*2019$y* ;
done < file_$y > logs_$y ;
done

我有一个想法,脚本将采用8位数字,并将它们插入zgrep location/app*此处$y*

,因此我最终得到了以下脚本,它满足了我的需要,并且工作得很好:

for y in {files} ;
do while read x ;
do echo $x && z=/location/app*20"${x:0:8}"* && zgrep $x $z ;
done < list_$y > logs_$y ;
done ;

快速破解:我认为你可以用一个快速sed和一个zgrep来替换整个内部循环


grep有-f选项。如果您想在压缩日志中搜索a、b或c,而不是每次解压缩3次并搜索一个字母,您可以使用zgrep-E'a | b | c'日志对其中任何一个进行解压缩并搜索一次*
for y in {files} 
do zgrep -f list_$y $( sed  -E 's,(.*),/location/app*20\1*,' list_$y )
done