在 7z 文件中的文件中查找模式

Find pattern inside file inside a 7z file

我有数千个名为 data1.7z、data2.7z 等的 7z 文件。每个文件的内容是 data1.log、data2.log 等。我可以使用列出内容 7z l *.7z。 我想做的是 grep 或在 .log 文件中找到一个模式,而不需要全部提取。 这些文件包含 IP 地址,并希望从每个 .log 文件中另一个名为 ipaddress.txt 的文件中找到一组 IP 地址,并打印出与 .txt 文件中的任何 IP 匹配的行。

提前致谢。

那是不可能的。你不能 grep 压缩数据。
与 7z 存储未压缩的压缩文件的名称不同,实际文件数据以修改后的状态存储(由压缩过程更改)。

如果要搜索,需要解压。

您可以做的是使用脚本自动执行此过程,以免留下未压缩的文件。

例如,7z 可以输出到标准输出,因此您可以将结果直接通过管道传输到 grep:

for FILE in *.7z; do
    7z e -so ${FILE} | grep '127\.0\.0\.1'
done

或者,您可能希望正常提取文件,然后在 grep 未找到任何内容时将其删除,或者如果 grep 确实找到了您要查找的 IP,则将其未压缩以供进一步检查:

for FILE in *.7z; do
    7z e ${FILE}
    LOG=${FILE%7z}log
    grep -q '127\.0\.0\.1' ${LOG}
    if [ $? -ne 0 ]; then
        rm ${LOG}
    fi
done