2012-03-29 2 views
1

durch alle Dateien suchen Angenommen, ich habe eine Sammlung von Dateien wie folgen aus:zeigt, die ein grep angepassten Dateien, die aus einer Sammlung

echo -e "apple\n cherry" >> f1.txt; 
echo -e "grape\n strawberry" >> f2.txt; 
echo -e "orange\n cherry" >> f3.txt; 

Und ich mag jede Datei finden, die das Wort „Kirsche“ hat in es. Ich kann dies tun:

ls *.txt | xargs cat | grep cherry 

Aber das gibt nur die beiden Linien, die von f1 und f3 entsprechen, ohne die „Quelle“ Dateien zeigt, wie so:

cherry 
cherry 

Ich mag würde, ist zu siehe die Dateien, in denen diese Begegnungen kamen aus --- etwas wie folgt aus:

f1.txt -> cherry 
f3.txt -> cherry 

gibt es eine Möglichkeit, dies zu tun einfach von der Kommandozeile?

+0

ein bekanntes Gesicht ... auf SO! –

+0

warte ... machst du eine Studie über die Antworten, die du bekommst? : ^) –

+0

kleine Welt! Übrigens, das Papier, mit dem Sie uns geholfen haben, wurde bei AAAI akzeptiert - das Ganze ist sehr schön geworden. Hier ist der Link: http://www.aaai.org/ocs/index.php/WS/AAAIW11/paper/view/3983 –

Antwort

3
[email protected]:/tmp$ echo -e "apple\n cherry" >> f1.txt; 
[email protected]:/tmp$ echo -e "grape\n strawberry" >> f2.txt; 
[email protected]:/tmp$ echo -e "orange\n cherry" >> f3.txt; 
[email protected]:/tmp$ grep cherry *txt 
f1.txt: cherry 
f3.txt: cherry 
+0

JC, du bist großartig - danke. SO sagt ich muss 11 Minuten Minuten, um die Antwort zu genehmigen ... –

3

Die -l Option bedeutet, dass grep nur die passenden Dateinamen gedruckt werden, anstatt die passenden Linien, so können Sie Ihre Aufgabe erreicht werden durch:

$ grep -l cherry *.txt 
f1.txt 
f3.txt 

(Beachten Sie, dass die ls und die xargs sind unnötig für diese Aufgabe, behandelt grep alle bis auf die erste seiner positionsargumente als Dateien, um durchzusehen)

2

Versuchen Sie grep -H, um den Dateinamen und die Übereinstimmung zu drucken. Aus der Manpage:

-H, --with-filename 
      Print the file name for each match. This is the default when 
      there is more than one file to search. 

Ich finde diese nützlich ist, wenn grep mit find verwenden.

+0

guten einen. Das war mir nicht bewusst. –

0

grep Kirsche * .txt Dies sollte es tun für Sie

1

Wenn Sie ls *.txt | xargs cat tun, erhalten Sie einen kombinierten Strom von Daten, so dass die Informationen von Dateinamen verloren und kann nicht durch einen nachfolgenden grep zurückgewonnen werden .

sollten Diese funktionieren:

ls *.txt | xargs grep cherry 

oder noch einfacher:

grep cherry *.txt 
Verwandte Themen