times - grep search multiple expressions




grep eine Datei, zeige aber mehrere umgebende Zeilen? (6)

Ich möchte für eine Zeichenfolge grep , aber auch die vorhergehenden fünf Zeilen und die folgenden fünf Zeilen sowie die übereinstimmende Zeile anzeigen. Wie könnte ich das schaffen?


ripgrep

Wenn Sie sich für die Leistung ripgrep , verwenden Sie ripgrep das eine ähnliche Syntax wie grep , z

rg -C5 "pattern" .

-C , --context NUM - Zeigt vor und nach jedem Match NUM-Zeilen an.

Es gibt auch Parameter wie -A / --after-context und -B / --before-context .

Das Tool basiert auf der Regex-Engine von Rust und ist daher sehr efficient bei großen Datenmengen.


Bei BSD oder GNU grep Sie mit -B num die Anzahl der Zeilen vor dem Match und -A num für die Anzahl der Zeilen nach dem Match einstellen.

grep -B 3 -A 2 foo README.txt

Wenn Sie die gleiche Anzahl von Zeilen vor und nach verwenden möchten, können Sie -C num .

grep -C 3 foo README.txt

Dies zeigt 3 Zeilen vor und 3 Zeilen nach.


Ich benutze normalerweise

grep searchstring file -C n # n for number of lines of context up and down

Viele der Tools wie grep haben auch wirklich tolle Man-Dateien. Ich beziehe mich oft auf die Handbuchseite von grep, weil es so viel gibt, was man damit machen kann.

man grep

Viele GNU-Tools verfügen auch über eine Info-Seite , die neben der Man-Seite weitere nützliche Informationen enthält.

info grep

Suchen Sie nach "17655" in "/some/file.txt", das 10 Zeilen vor und nach dem Kontext (mit Awk) zeigt. Die Ausgabe beginnt mit der Zeilennummer und einem Doppelpunkt. Verwenden Sie dies unter Solaris, wenn "grep" die Optionen "- [ACB]" nicht unterstützt.

awk '

/17655/ {
        for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
                print before[i]
        }
        print (NR ":" ($0))
        a = 10
}

a-- > 0 {
        print (NR ":" ($0))
}

{
        before[b] = (NR ":" ($0))
        b = (b + 1) % 10
}' /some/file.txt;

ack arbeitet mit ähnlichen Argumenten wie grep und akzeptiert -C . In der Regel ist es jedoch besser, den Code zu durchsuchen.


-A und -B funktionieren ebenso wie -C n (für n Kontextzeilen) oder nur -n (für n Kontextzeilen).





command-line-interface