Wie kann ich in ack und grep eine Suche mit maximaler Tiefe durchführen?


32

Kann ich festlegen ack, dass nur im aktuellen Ordner nach Text gesucht wird? (oder ein max-depthLevel angeben ?) Und mit grep?


1
Nein, ack hat keine Option für die maximale Tiefe, -nmit Ausnahme der Option, überhaupt nicht zurückzugreifen.
Andy Lester

Antworten:


22

Verwenden Sie -nfür no-recurse:

$ ack -n foo

grep ist standardmäßig nicht rekursiv und Sie sollten das -r Flag nur verwenden, wenn Sie eine rekursive Suche wünschen.

Sie können das aktuelle Verzeichnis grepfolgendermaßen durchsuchen :

$ grep -- foo *

13
Beantwortet die Frage nicht? (Was ist, wenn ich auf eine Tiefe von 2 zurückgreifen möchte)
Steven Lu

Guter Punkt, das habe ich verpasst. Irgendwelche Vorschläge?
Eric Wilson

29

Sie können find mit dem Argument -exec koppeln. Beispiel:

find . -maxdepth 1 -exec grep foo {} \;

Dies kann skaliert werden, dh -maxdepth 2


Stephane, meine Antwort ( -maxdepth 1) war skalierbar. Zum Beispiel -maxdepth 2. Ich weiß nicht, wie ich die von Ihnen vorgenommene Bearbeitung beschreiben soll.
David Wilkins

es wird @stephane nicht erreichen, wenn Sie das @ nicht verwenden.
Braiam

4
Ja, leider stimme ich zu, dass meine Bearbeitung zu aufdringlich war. Vielleicht möchten Sie noch klarstellen, dass that ( -maxdepth) keine portable / Standard-Syntax ist (nur GNU und einige BSDs). Außerdem hat die Verwendung \;hier keinen Sinn (eine greppro Datei ausführen ). Verwenden Sie grep -H foo {} +(GNU-spezifisch) oder grep foo /dev/null {} +(Standard), um sicherzustellen, dass der Dateiname immer gedruckt wird. Das Standardäquivalent zu -maxdepth 2wärefind . -path './*/*' -type d -prune -o -type f -exec ...
Stéphane Chazelas

2
Beachten Sie auch, dass Ihre Fehlermeldungen für Verzeichnisse (einschließlich der, .die Sie nicht geben -mindepth 1) geben, während GNU grepnicht versucht, Verzeichnisse mit zu lesen -r(es rekursiert auf ihnen). Möglicherweise möchten Sie eine hinzufügen , -d skipum grep(unter der Annahme GNU grep) oder besser hinzufügen ! -type dzu findoder noch besser -type f(oder -xtype fGNU vorausgesetzt find) , wie Sie wahrscheinlich nicht wollen , grepnicht reguläre Dateien lesen.
Stéphane Chazelas

4
Ich neige dazu, grep -Hindiesen Ansatz zu verwenden, damit ich den Dateinamen und die Zeile sehen kann, in der sich das Vorkommen befindet.
GDP2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.