grep 文本仅来自 7z 内小于 x 大小的文件

grep 文本仅来自 7z 内小于 x 大小的文件

我有一个 7z 文件,其中包含二进制数据以及大型 (>1Mb) 和小型 (<1Mb) XML 文件。

我只想查找包含特定字符串的小 XML 文件。我尝试过使用 zgrep,但它似乎会在所有文件中搜索。

编辑:我最终做的是编写 .7z 内所有 xml 文件的列表,仅 grep 具有 6 位数字的行,仅复制文件名并提取它们。有更有效的方法吗?

7z l test.7z *.xml > tmplist1
num="6"
grep -E "\s[0-9]{$num}\s" tmplist1 | grep -oE '[^[:space:]]+$' | sed "s/^/*/" > tmplist2
7z e -o/tmp test.7z -i@tmplist2 -aos
grep -E "*string*" /tmp/*.xml > tmplist3

答案1

关于什么

find . -iname "*.7z" -o -iname "*.xml" -size -1M -exec grep -options {} \;

?在当前工作目录中find查找块设备、特殊的无缓冲字符条目、目录、文件、符号链接、命名 FIFO 管道、套接字等
.(如果是给定的唯一路径,则不需要),
-iname "*.xml".xml在名称末尾(不区分大小写)
-o或(逻辑上)在名称末尾
-iname "*.7z" 加上.7z或 ,大小小于 1 MB ,并在所有找到的文件上执行,并用您自己的选项替换.终于结束这部分了。.7Z
-size -1M
-exec grep -options {}grep-options
\;-exec

相关内容