Wie kann man in einer Datei nach einem Wort suchen und gleichzeitig die gesamte Datei zusammen mit dem gefundenen Wort anzeigen?

Wie kann man in einer Datei nach einem Wort suchen und gleichzeitig die gesamte Datei zusammen mit dem gefundenen Wort anzeigen?

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 grepkö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 patternoder ohne Muster. Also wird alles übereinstimmen.

Ich habe grepeinen 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, -IBinärdateien zu ignorieren, da sie die lessInteraktion 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.

verwandte Informationen