需要在 (.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