在压缩文件夹中对文件运行grep -f命令

8

我正在一个程序中执行递归的 fgrep/grep -f 搜索,使用以下命令对一个被压缩的文件夹进行搜索:

我使用的命令:

grep -r -i -z -I -f /path/to/pattern/file /home/folder/TestZipFolder.zip

在模式文件中,我正在尝试搜索的字符串是“Dog”。

在压缩的文件夹中有许多包含字符串“Dog”的文本文件。

grep -f命令成功地找到了压缩文件夹内3个包含字符串“Dog”的文本文件,但它将输出打印在一行上,并且一些奇怪的字符出现在末尾,例如PK(如下所示)。当我尝试在程序中将输出打印到文件时,其他字符也会出现在末尾,例如^B^T^@

grep -f命令的输出:

TestZipFolder/test.txtThis is a file containing the string DogPKtest1.txtDog, is found again in this file.PKTestZipFolder/another.txtDog is written in this file.PK 

当字符串“Dog”被找到时,我该如何使每个包含此字符串的文件打印在新行上,以便它们不像现在一样都聚集在一行上?

另外,输出中出现的“PK”和其他奇怪字符是从哪儿来的?如何防止它们出现?

期望输出结果

TestZipFolder/test.txt:This is a file containing the string Dog
TestZipFolder/test1.txt:Dog, is found again in this file
TestZipFolder/another.txt:Dog is written in this file

以下是类似的内容,用户可以看到字符串在文件中的位置(如果在非zip文件上运行grep命令,则会得到此格式的输出)。

1个回答

11

如果您需要多行输出,最好使用zipgrep

zipgrep -s "pattern" TestZipFolder.zip

-s是用来抑制错误消息的(可选)。此命令将打印每个匹配行以及文件名。如果要删除重复的名称,当一个文件中有多个匹配项时,必须使用循环/ grep或awk或sed进行其他处理。

实际上,zipgrepegrepunzip的结合体。其用法如下:

zipgrep [egrep_options] pattern file[.zip] [file(s) ...] [-x xfile(s) ...]

所以你可以将任何egrep选项传递给它。


有没有办法像在我的问题中的grep命令那样显示匹配项在文件中的位置,而不仅仅是列出找到它的文件?- 非常感谢 - yonetpkbji
你能提供期望的输出吗?如果可以,我可以尝试一下。 - blackSmith
我更新了我的问题以展示所需的输出。如果您在不是zip文件的文件夹上运行grep命令(即它会显示找到匹配项的文件名,然后在冒号后显示其位置),则输出格式相同。非常感谢。 - yonetpkbji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接