2013-08-02 22 views
8

我有我希望有人能夠幫助...的grep -f在壓縮文件夾

我-f搜索上壓縮了文件夾使用執行遞歸fgrep一樣/ grep的問題在我的節目之一下面的命令:

命令我使用

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

裏面的病毒碼文件,我想搜索字符串「狗」。

在壓縮文件夾中有一些包含字符串「Dog」的文本文件。

grep -f命令可以在壓縮文件夾內的3個文件中成功找到包含字符串「Dog」的文本文件,但它將輸出全部打印在一行上,並在結尾處顯示一些奇怪的字符,即PK(as如下所示)。當我嘗試並打印輸出到文件在我的程序的其他字符出現在年底從grep的-f命令如^B^T^@

輸出:

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 

東西沿着這些線路,從而使用戶能夠看到該字符串可以在文件中找到(你實際上得到的輸出格式,如果您運行的grep命令在不是zip文件的文件上)。

與此您的幫助深表感謝,感謝

回答

10

如果你需要多行輸出,更好地運用zipgrep

zipgrep -s "pattern" TestZipFolder.zip 

-s是抑制錯誤消息(可選) 。該命令將打印每個匹配的行以及文件名。如果要刪除重複名稱,當文件中有多個匹配項時,必須使用loops/grep或awk或sed完成其他一些處理。

實際上,zipgrep是組合egrep的解壓。它的用法如下:

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

所以你可以通過任何egrep選項。

+0

有沒有什麼辦法可以顯示我的問題中grep命令中的文件匹配的位置,而不僅僅是列出其中的文件? - 非常感謝 –

+0

你能提供所需的輸出嗎?如果你這樣做,我可以試一試。 – blackSmith

+0

更新我的問題以顯示所需的輸出。如果你在一個不是zip文件的文件夾上運行grep命令,它的輸出格式是相同的(例如,它給出了在冒號顯示的位置之後發現匹配的文件的名稱)謝謝很多 –