
Ich verwende Ubuntu 16.04.
Ich möchte nach einem bestimmten Wort suchen, aber ich möchte auch, dass die gesamte Datei, die das Wort enthält, auf dem Terminal ausgegeben wird, damit ich sehen kann, wo in der Datei das Wort steht. Wenn ich jedoch verwende grep
, wird nur der bestimmte Satz angezeigt, der das Wort enthält, nicht die gesamte Datei.
Mit welchem Befehl kann ich nach einem Wort suchen und gleichzeitig die gesamte Datei sowie die Stelle anzeigen, an der sich das Wort befindet?
Antwort1
Mit grep
können Sie verwenden:
$ grep -E -e 'pattern' -e '$' file
oder vereinfacht:
$ grep -E 'pattern|$' file
Technisch würde das auch funktionieren:
$ grep -E 'pattern|^' file
oder sogar: grep -E 'pattern|' file
. Es heißt Zeilen mit pattern
oder ohne Muster. Also wird alles übereinstimmen.
Ich habe grep
einen Alias zu verwendet grep --color=always
. Wenn Sie das nicht tun, müssen Sie die Farboption selbst übergeben.
Mit less
:
$ less -p 'pattern' file
Die Datei wird dann in kürzerer Zeit angezeigt, der gewünschte Begriff wird hervorgehoben und Sie können mit nund shift+ nzwischen den Treffern hin- und herspringen.
Antwort2
Bearbeiten: Ich habe die Frage in meiner ursprünglichen Antwort falsch interpretiert.... Ich habe sie bearbeitet, um das gewünschte Ergebnis zu erzielen... Ich habe in der Ausgabe nur den Dateinamen angezeigt. Ich habe diese Antwort bearbeitet, um diese Ausgabe zu verwenden, um die gesamte Datei anzuzeigen, indem ich „less“ verwende (wie Ravexinas Antwort vorschlägt)
... außerdem werden dadurch nur die Dateien (in less
) zurückgegeben, die von grep beim Durchsuchen eines oder mehrerer Verzeichnisse gefunden wurden.
.... und ich habe hinzugefügt, -I
Binärdateien zu ignorieren, da sie die less
Interaktion möglicherweise unübersichtlich machen. Entfernen Sie es, wenn Sie nach Binärdateien oder Dateien suchen müssen, die grep möglicherweise für binär hält.
Verwenden Sie das Flag „with-filename“ mit grep, um die Datei anzuzeigen. (das Flag ist -H
)
Ich gehe davon aus, dass Sie ein Verzeichnis und alle darin enthaltenen Dateien durchsuchen. Wenn Sie außerhalb des aktuellen Verzeichnisses suchen, verwenden Sie dies, *
um den Fehler „ist ein Verzeichnis“ ohne Ergebnisse zu vermeiden.
grep -HI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
oder
grep --with-filename -I pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
oder beim Drilldown in Unterverzeichnisse ...
grep -rHI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
Ich mag es nicht, das Muster zweimal einzugeben, es könnte verbessert werden
Antwort3
Wenn Sie sehen möchten, wo in der Datei sich der gesuchte Text befindet, verwenden Sie das Flag C. Beispiel:
grep -C 5 'MySearchText' *
zeigt die Zeile mit dem Text sowie fünf Zeilen vor und fünf Zeilen nach der gewünschten Suche an.
Antwort4
Als Ergänzung zu den anderen Antworten: Sie können den Optionen „-n“ hinzufügen, um die Zeilennummern auf der linken Seite anzuzeigen:
grep -n -C 3 "something" filename
zeigt Ihnen Zeilen an, die „etwas“ enthalten, mit 3 Zeilen „Kontext“ (d. h. 3 Zeilen vor und nach den Zeilen, die mit „etwas“ übereinstimmen), und an den Anfang jeder angezeigten Zeile wird ihre Zeilennummer angehängt.