2017-09-06 1 views
0

Ich habe zwei Dateien file1 und file2 und ein Muster pattern.Ausführen von zweiten Grep auf jeder Zeichenfolge, die von ersten grep zurückgegeben wird

Mit grep auf pattern in file1 und cut, erzeuge ich ein paar Strings wie folgt vor:

String1 
String2 
String3 
String4 
String5 

Für jede dieser Strings, ich habe file2 grep. Wie kann ich das machen?

Für jetzt mache ich das manuell, aber eine bessere Methode muss existieren. Ich kann das wahrscheinlich mit einer for-Schleife tun, aber ich frage mich, ob die Ergebnisse der ersten grep und zu zweiten grep irgendwie funktionieren können.

Hinweis: Bitte lassen Sie mich wissen, wenn weitere Informationen benötigt werden.

+0

Bitte geben Sie Arbeitsbeispiele von 'file1',' file2' und 'pattern' zusammen mit der erwarteten Ausgabe an. –

Antwort

3

Sie können process substitution mit -f Option:

grep -Ff <(grep -o 'pattern' file1) file2 
+1

kurz und süß. Nett. – User9102d82

+0

Ah, das OP verwendet bash? Die Frage hat das nicht erwähnt. Woher wusstest du das?! – ghoti

+0

@ghoti: Für viele Leute gilt 'Shell' als" bash " – anubhava

3

grep hat die -f Option, die ein Dateiargument hat dauert macht und nutzt jede Zeile in der Datei als Muster. So können Sie einen zweistufigen Prozess verwenden:

$ grep pattern file1 > tmp-file 
$ grep -f tmp-file file2 > output 

Im ersten Schritt extrahieren Sie die Zeilen aus der ersten Datei und speichert sie in einer Datei tmp. Der zweite Schritt verwendet dann diesen Mustersatz, um die übereinstimmenden Zeilen aus der zweiten Datei zu extrahieren.

Sie können diese Dinge kombinieren und die Lösung erreichen, auf die @anubhava hinweist.