Ich bin auf der Suche nach einer einfachen/eleganten Möglichkeit, eine Datei so zu grep, dass jede zurückgegebene Zeile mit jeder Zeile einer Musterdatei übereinstimmen muss.Grep, um alle Zeilen der Musterdatei zu entsprechen (perl -e ok auch)
Mit Eingabedatei
acb
bc
ca
bac
Und Musterdatei
a
b
c
Der Befehl sollte
acb
bac
kehre ich versucht, dies mit grep -f
zu tun, aber das zurückgibt, wenn es einen einzigen Treffer Muster in der Datei (und nicht alle). Ich probierte auch etwas mit einem rekursiven Aufruf an perl -ne
(foreach Zeile der Musterdatei, rufen Sie Perl -ne auf der Suchdatei und versuchen, Grep in Stelle), aber ich konnte nicht den Syntaxparser einen Perl-Aufruf von Perl zu akzeptieren , also nicht sicher, ob das möglich ist.
Ich dachte, es gibt wahrscheinlich einen eleganteren Weg, dies zu tun, also dachte ich, ich würde nachsehen. Vielen Dank!
=== UPDATE ===
Vielen Dank für Ihre Antworten so weit, sorry, wenn ich nicht klar war, aber ich hatte gehofft, für nur eine einzeilige Ergebnis (Erstellen eines Skripts für diese zu schwer scheint, wollte nur etwas schnell). Ich habe einige mehr darüber nachgedacht, und ich kam so weit mit auf den Punkt:
perl -n -e 'chomp($_); print " | grep $_ "' pattern | xargs echo "cat input"
die
cat input | grep a | grep b | grep c
Diese Saite druckt ist, was ich ausführen wollen, ich muss nur irgendwie ausführen jetzt. Ich habe versucht, ein zusätzliches Rohr
perl -n -e 'chomp($_); print " | grep $_ "' pattern | xargs echo "cat input" | eval
eval aber, dass die Nachricht gibt:
xargs: echo: terminated by signal 13
Ich bin nicht sicher, was das bedeutet?
Signal 13 ist 'SIGPIPE'. Die Pfeife wurde geschlossen, während 'Xargs' darauf schrieb; etwas voraussagbar, denn es gibt nichts in 'eval', das es jemals lesen würde. Ganz und gar nicht klar, was du mit dem Zeug aus den 'Xargs' sowieso erreichen willst. – tripleee