在(.gz)压缩文件夹中搜索字符串及其中的文件

在(.gz)压缩文件夹中搜索字符串及其中的文件

需要在 (.gz) 压缩文件夹中搜索包含文件的字符串。

样本文件夹 -

PROD_009_010919_0110.tar.gz

里面的文件 - PROD_009_010919.log01, PROD_009_010919.log02, PROD_009_010919.log03......等

命令 -zgrep -ia *123456* PROD_* 未获取预期结果。

预期输出 - 我应该在压缩文件夹中的所有文件中搜索字符串“123456”并显示包含文件的字符串。

答案1

这会打印出 tarball 中与给定模式匹配的文件列表:

tar --ignore-command-error -xvf PROD_009_010919_0110.tar.gz --to-command="grep -FH 1234536 -" | grep -B1 --no-group-separator '(standard input)' | grep -v '(standard input)'

--to-command选项提取每个文件并将其发送到命令的标准输入grep。该-v选项会列出每个文件的处理情况。

用于在找不到匹配项--ignore-command-error时忽略退出状态。grep由于-H该命令使用了选项(打印文件名)grep,每个匹配行都以“(标准输入)”字符串为前缀。

这会导致命令产生以下类型的输出tar

file1
file2
(standard input): <matched lines from file2>
file3
(standard input): <matched lines from file3>

通过管道传输此输出允许两个grep命令仅提取下一行紧跟“(标准输入)”字符串的文件名。可以使用正则表达式来匹配模式而不是grep我在这里使用的两个顺序命令来改进此处理。

在这种情况下,结果输出将是:

file2
file3

相关内容