在 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
我有数千个名为 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