Was sind all die Globs, die ich in Bash mit grep verwenden kann?

674
Hashim

Linux- und Unix-ähnliche Shells basherlauben die Verwendung von Globs, um Dateinamen zu approximieren und die Dateisuche zu vereinfachen. Ich kenne den Platzhalter Glob (*). Welche anderen Punkte gibt es bash, mit denen ich Gebrauch machen kann grep?

0
"grep" verwendet reguläre Ausdrücke; diese unterscheiden sich von blobs. Einige `grep`-Implementierungen verwenden Globs mit Optionen wie --exclude = GLOB`, aber ich denke, diese Optionen werden von POSIX nicht benötigt. Sie sollten also nicht davon ausgehen, dass "grep" etwas über Globs weiß. Kamil Maciorowski vor 6 Jahren 2
@ KamilMaciorowski Ich kenne den Unterschied zwischen Globs und Regex, aber ich hatte den Eindruck, dass GNU grep Globs standardmäßig unterstützt (sogar mit `grep -F`), genau wie die meisten anderen Befehle in` bash`. Hashim vor 6 Jahren 0
"Genau wie die meisten anderen Befehle in" bash "-" grep "ist kein" Befehl in "bash" ", sondern eine separate ausführbare Datei, die Sie ohne Shell ausführen können, wenn Sie wissen, wie. Sie sollten Globs, die um "bash" erweitert wurden, sorgfältig unterscheiden, bevor "grep" (oder ein in einer Shell aufgerufener Befehl) sogar von Globs, regulären Ausdrücken oder Ähnlichem ausgeführt wird, die vom Befehl selbst unterstützt werden. Kamil Maciorowski vor 6 Jahren 2
ZB `finden. -name` unterstützt glob-ähnliche Musterübereinstimmungen. [Sehen Sie, was passiert] (https://superuser.com/q/1217773/432690), wenn Sie die Shell erweitern lassen. Kamil Maciorowski vor 6 Jahren 0
Sie sagen also, dass "grep" selbst keine Globs verwendet, und damit können Globs nicht verwendet werden? So etwas wie "grep -f * .txt" gibt keine Textdateien zurück, oder "grep Match * file.txt" gibt Match1, Match2, Match3 usw. nicht zurück. Hashim vor 6 Jahren 0
Die Shell dehnt die Globs aus, bevor sie an "grep" in der Argumentliste übergeben werden. `Grep -f * .txt` erweitert sich dann zu etwas wie` grep -f file1.txt file2.txt file3.txt`, und `grep` interpretiert` file1.txt` als Datei, aus der Suchmuster gelesen werden sollen. und `file2.txt` und` file3.txt` als Dateien, um nach diesen Mustern zu suchen. "grep" hat überhaupt keine Ahnung, dass es sich um ein Glob-Muster handelt, es weiß nur, dass es die Argumente "-f", "file1.txt", "file2.txt" und "file3.txt" als Argumente hat. Gordon Davisson vor 6 Jahren 2
Rufen Sie set -x auf (verwenden Sie set + x, um dies später rückgängig zu machen). Führen Sie dann `grep -f * .txt 1> / dev / null 2> / dev / null` aus (Umleitungen dienen nur dazu, den Befehl selbst stumm zu machen). Was immer Sie nach "+" sehen, ist der eigentliche Befehl. Versuchen Sie es in Verzeichnissen mit 0, 1 oder mehr übereinstimmenden Dateien. Sie werden sehen, welche Argumente "grep" wirklich bekommt. Kamil Maciorowski vor 6 Jahren 1

0 Antworten auf die Frage