Wie verwende ich grep, um mehrere Strings in derselben Zeile zu finden?
Ich versuche, mit grep
zu entsprechen Zeilen mit zwei verschiedenen Saiten. Ich habe Folgendes versucht, aber diese Spiele Zeilen, in denen string1 oder string2 das nicht, was ich will.
grep 'string1\|string2' filename
So, wie ich mit grep
nur die Zeilen, die enthalten beide strings?
InformationsquelleAutor der Frage hearsaxas | 2010-12-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
grep 'string1' filename | grep 'string2'
Oder
grep 'string1.*string2\|string2.*string1' filename
InformationsquelleAutor der Antwort dheerosaur
Ich denke, das ist, was Sie gesucht haben:
Ich denke, dass Antworten wie diese:
nur der Fall, wenn beide vorhanden sind, nicht die eine oder die andere oder beide.
InformationsquelleAutor der Antwort user45949
Nur, es mehrere
-e
Optionen.Somit wird die Mannschaft:
Hinweis: der Oben zitierte ich die BSD-version der Anleitung, aber wie es aussieht ist das gleiche auf Linux.
InformationsquelleAutor der Antwort Tony
Zur Suche nach Dateien, die alle Wörter in beliebiger Reihenfolge überall:
Den ersten grep startet eine rekursive Suche an (
r
), ignoring case (i
) und Auflistung (Ausdruck) die Namen der Dateien an, die passend sind (l
) für einen Begriff ('action'
mit den single quotes), die überall in der Datei.Den nachfolgenden greps Suche nach den anderen Bedingungen, behalten Fall Unempfindlichkeit und auflisten die passenden Dateien.
In der endgültigen Liste der Dateien, die Sie erhalten, sind diejenigen, die diese Begriffe in beliebiger Reihenfolge irgendwo in der Datei.
InformationsquelleAutor der Antwort Kinjal Dixit
Wenn Sie eine
grep
mit einem-P
option für einen begrenztenperl
regex, die Sie verwenden können,den Vorteil hat, die das arbeiten mit überlappenden strings. Es ist etwas einfacher mit
perl
alsgrep
weil Sie festlegen können, dass die und-Logik mehr direkt:InformationsquelleAutor der Antwort tchrist
Ihre Methode war fast gut, nur fehlt die -w
InformationsquelleAutor der Antwort Leo
Könnten Sie versuchen, so etwas wie dieses:
InformationsquelleAutor der Antwort John Dorn
Den
|
Betreiber in einem regulären Ausdruck bedeutet oder. Das heißt entweder string1 oder string2 entspricht. Sie tun konnten:die Leitung die Ergebnisse aus dem ersten Befehl in der zweiten grep. Das sollte geben Sie nur die Zeilen, die passen beide.
InformationsquelleAutor der Antwort martineno
Legen Sie die Zeichenfolgen, die Sie wollen, um grep in eine Datei
Dann Suche mit -f
InformationsquelleAutor der Antwort Tim Seed
Gefunden Zeilen, die nur beginnt mit 6 Räumen und endete mit:
InformationsquelleAutor der Antwort Cristian
Lassen Sie uns sagen, wir brauchen zu finden, die Anzahl der mehrere Wörter in einer Datei testfile.
Es gibt zwei Möglichkeiten, darüber zu gehen
1) Benutzen Sie grep mit regex suchpattern
2) Benutzen Sie egrep Befehl
Mit egrep Sie brauchen nicht zu befürchten, Ausdruck und nur einzelne Wörter durch ein pipe-separator.
InformationsquelleAutor der Antwort Amit Singh
für multiline-match:
oder
wir brauchen nur zu entfernen die neue-Zeile-Zeichen und es funktioniert!
InformationsquelleAutor der Antwort Aquarius Power
erhalten Linie mit string1 und string2 in beliebiger Reihenfolge
InformationsquelleAutor der Antwort James
Ich oft laufen in das gleiche problem wie deins, und ich schrieb ein Stück Skript:
Verwendung:
Können Sie es in .bashrc, wenn Sie mögen.
InformationsquelleAutor der Antwort ruanhao
Und wie Leute vorgeschlagen, perl und python, und verschachtelt, shell-Skripte, hier eine einfache awk Ansatz:
Angeschaut, die Kommentare zu den akzeptierten Antwort: Nein, dies nicht tun, multi-line, aber dann ist das auch nicht, was der Autor der Frage gebeten.
InformationsquelleAutor der Antwort tink
Diese Werke für die exakte Suche und die passenden groß-und Kleinschreibung Wörter ,die ich verwendet,
InformationsquelleAutor der Antwort Saurabh
Sollten Sie
grep
wie diese:InformationsquelleAutor der Antwort Raghuram