Für ag
, ab Version 0.19.2 wird standardmäßig in Verzeichnissen und Dateien rekursiv gesucht.
Um nach mehreren Mustern zu suchen, können Sie eine ähnliche Syntax wie ack
verwenden
ag 'pattern1|pattern2'
wird sowohl nach pattern1
suchen und pattern2
.
Falls Sie nicht rekursiv suchen möchten, können Sie die Suchtiefe mit dem Schalter --depth NUM
auf 1 setzen
Daher
ag 'pattern1|pattern2' --depth 1
sucht nur im aktuellen Verzeichnis nach beiden Mustern.
Das sollte reichen:
ack -R 'string1|string2'
Als -R
ist der Standardwert, Sie können ihn weglassen:
ack 'string1|string2'
Ab man ack
:
-r , -R , --recurse
Rekursion in Unterverzeichnisse. Dies ist die Standardeinstellung und dient lediglich der Kompatibilität mit grep. Sie können es auch verwenden, um --no-recurseoff auszuschalten.
Wenn Sie das Muster aus einer Datei erhalten möchten, sagen Sie /path/to/patterns.file, können Sie Folgendes verwenden:
ack "$(cat /path/to/patterns.file)"
oder gleichwertig:
ack "$(< /path/to/patterns.file)"
Ich kann kein genaues Äquivalent zu grep -f
finden .
Der ack-Befehl kann auch mit Pipes verknüpft werden. Zum Beispiel findet der erste ack Dateien, die pattern1 enthalten Dann leiten Sie das an eine andere Bestätigung weiter, um nur diese Dateien nach Muster2 zu durchsuchen
ack -l 'pattern1' | ack -x 'pattern2'
Das -l Parameter bedeutet, dass nur die übereinstimmenden Dateien (anstelle des übereinstimmenden Textes) aufgelistet werden. Das -x Parameter bedeutet, dass nur die an ihn geleiteten Dateien durchsucht werden. Dies ähnelt dem Eingrenzen der Dateien für die nächste Ack-Suche.
ack -l 'pattern1' | ack -xl 'pattern2' | ack -x 'pattern3'
Dies ist ein UND -Operator und nicht der OR-Operator, der in den anderen Lösungen angegeben ist.