Ich möchte grep
für eine Zeichenfolge, aber auch die vorhergehenden fünf Zeilen und die folgenden fünf Zeilen sowie die übereinstimmende Zeile anzeigen. Wie könnte ich das tun?
search
logging
grep
command-line-interface
Mark Harrison
quelle
quelle
man grep | grep -C 1 context
:)man grep | grep -C 1 "\-C"
;)Antworten:
Für BSD oder GNU können
grep
Sie-B num
festlegen, wie viele Zeilen vor dem Spiel und wie viele-A num
Zeilen nach dem Spiel vorhanden sind.Wenn Sie die gleiche Anzahl von Zeilen vor und nach der Verwendung wünschen
-C num
.Dies zeigt 3 Zeilen vor und 3 Zeilen nach.
quelle
-A
und-B
funktioniert genauso wie-C n
(fürn
Kontextzeilen) oder nur-n
(fürn
Kontextzeilen ... solange n 1 bis 9 ist).quelle
-n
Format ausprobiert und herausgefunden, dass es nur bis funktioniert9
. Denn15
es gibt 5 Zeilen zurück-A
,-B
oder-C
). Normalerweise folgt auf den Optionsspezifizierer ein Wert (-o a.out
um die Ausgabedatei in GCC anzugeben), er kann jedoch auch als einfacher Schalter / Flag fungieren (-g
um Debugging-Informationen in GCC zu aktivieren). Leerzeichen zwischen Optionen sind jedoch optional. Bei Optionen ohne Wert können sie daher zusammengeführt werden (-ABC
). Dies bedeutet, dass sie-15
interpretiert werden-1 -5
(zwei separate Optionen) und die Optionen-5
überschrieben-1
.ack arbeitet mit ähnlichen Argumenten wie grep und akzeptiert
-C
. Normalerweise ist es jedoch besser, Code zu durchsuchen.quelle
grep
, nicht sicher zu sein, ob sie zum "Werben" verwendet wirdack
(was in der Tat ein großartiges Werkzeug ist).Das wird "myfile" für "astring" greifen und 5 Zeilen vor und nach jedem Match anzeigen
quelle
Ich benutze normalerweise
Viele der Tools wie grep haben auch wirklich großartige Man-Dateien. Ich beziehe mich oft auf die Manpage von grep, weil man so viel damit anfangen kann.
Viele GNU-Tools verfügen auch über eine Infoseite, die neben der Manpage möglicherweise weitere nützliche Informationen enthält.
quelle
Verwenden Sie grep
quelle
Suchen Sie in "/some/file.txt" nach "17655" und zeigen Sie den 10-Zeilen-Kontext vor und nach (mit Awk) an. Die Ausgabe wird mit der Zeilennummer gefolgt von einem Doppelpunkt versehen. Verwenden Sie diese Option unter Solaris, wenn 'grep' die Optionen "- [ACB]" nicht unterstützt.
quelle
ripgrep
Wenn Sie sich für die Leistung interessieren, verwenden Sie
ripgrep
eine ähnliche Syntax wiegrep
zEs gibt auch Parameter wie
-A
/--after-context
und-B
/--before-context
.Das Tool basiert auf der Regex-Engine von Rust, wodurch es bei großen Datenmengen sehr effizient ist .
quelle
Hier ist die @ Ygor-Lösung in
awk
Hinweis: Ersetzen
a
undb
Variablen durch Anzahl der Zeilen davor und danach.Es ist besonders nützlich für das System , das nicht grep unterstützt
-A
,-B
und-C
Parameter.quelle
-5
bringt Sie5
Linien über und unter dem Match 'thestring' ist gleichbedeutend mit-C 5
oder-A 5 -B 5
.quelle
Grep hat eine Option namens
Context Line Control
, Sie können die--context
darin einfach verwendenoder
Sollte den Trick machen
quelle
Ich mache den kompakten Weg
Das ist das Äquivalent von
quelle
Wenn Sie häufig nach Code suchen, ist AG, der Silbersucher, viel effizienter (dh schneller) als grep.
Sie zeigen Kontextzeilen mit der Option -C an.
Z.B:
quelle