2013-08-02 9 views
8

ben Birinin kullanarak bir fermuarını klasörde arama -f bir özyinelemeli fgrep/grep yapıyorumgrep -f

... yardımcı mümkün olacak umuyorum bir sorun var benim programlarından birine aşağıdaki komutu: Ben desen dosyası içinde

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

kullanıyorum

komut ben aramak için çalışıyorum dize "Köpek" dir.

Sıkıştırılmış klasörde, "Köpek" dizesini içeren bir dizi metin dosyası vardır.

grep -f komutu, sıkıştırılmış klasör içindeki 3 dosyada "Dog" dizesini içeren metin dosyalarını başarılı bir şekilde bulur, ancak çıktıyı bir satırda yazdırır ve bazı garip karakterler de görünür (örneğin, aşağıda gösterilen). Ben her alacağı Nasıl

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 

: Benim programda bir dosyaya çıktı denemek ve yazdırırken Ve diğer karakterler ucunda grep -f komutundan gibi ^B^T^@

Çıktı görünür "Dog" dizesinin yeni bir satıra yazdırıldığı tespit edilen dosyalar, böylece hepsi şu anda olduğu gibi bir satırda birlikte gruplandırılmıyorlar mı? Ayrıca çıktıda görünen "PK" ve diğer garip karakterler nerede ve nasıl görünmesini nasıl engellerim? Kullanıcı, bu sayede bu satırlar boyunca

İstenilen çıkış

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 

şey, dize dosyasında bulunabilir nerede grep çalıştırırsanız (aslında bu biçimde çıktı almak görmek zip dosyası olmayan bir dosyaya komut). Bir satırlı çıkışı gerekiyorsa

Bu konudaki Yardım çok takdir

, teşekkürler

cevap

10

, daha iyi zipgrep kullanın:

zipgrep -s "pattern" TestZipFolder.zip 

-s hata iletileri bastırmak için (isteğe bağlı) . Bu komut, her eşleşen çizgiyi dosya adıyla birlikte yazdıracaktır. Yinelenen adları kaldırmak istiyorsanız, birden fazla eşleşme bir dosyada olduğunda, başka bir işlem döngü/grep veya awk veya sed kullanılarak yapılmalıdır. Aslında

, zipgrepegrep ve halletmek bir kombinasyonudur.

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

böylece Bunda herhangi egrep seçenekleri geçirebilirsiniz: aşağıdaki gibi Ve onun kullanımıdır.

+0

Ayrıca, eşleşenin içinde bulunduğu dosyanın listelenmesinin aksine, eşleşmenin, sorgumdaki grep komutunda olduğu gibi nerede olduğunu gösterebileceğim bir yol var mı? - Çok teşekkürler –

+0

İstediğiniz çıktıyı sağlayabilir misiniz? Eğer yaparsan, deneyebilirim. – blackSmith

+0

Sorgum istenen çıktıyı göstermek için güncellendi. Bir zip dosyası olmayan bir klasöre grep komutunu çalıştırırsanız çıktı aynıdır (yani, kolonun nerede olduğunu gösterdikten sonra bir eşleşme bulunduğunda dosyanın adını verir) teşekkürler. Çok fazla –