4132 Stimmen

grep eine Datei, aber mehrere umliegende Zeilen anzeigen?

Ich möchte gerne grep für eine Zeichenkette, sondern zeigt auch die vorangehenden fünf Zeilen und die folgenden fünf Zeilen sowie die übereinstimmende Zeile an. Wie könnte ich dies tun?

4 Stimmen

Ich habe eine Kopie von Das Perl-Skript von Brendan Gregg zu diesem Zweck. Funktioniert gut.

7 Stimmen

Eine Lösung, die unter Solaris funktioniert, finden Sie unter dieser Link .

154 Stimmen

man grep | grep -C 1 context :)

22voto

Sam Merrell Punkte 2332

Ich verwende normalerweise

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

Viele der Tools wie grep haben auch sehr gute man-Dateien. Ich selbst beziehe mich auf Manpage von grep viel, weil man damit so viel machen kann.

man grep

Viele GNU-Werkzeuge haben auch eine Infoseite die zusätzlich zur Manpage weitere nützliche Informationen enthalten können.

info grep

19voto

chtenb Punkte 13189

Grep verwenden

$ grep --help | grep -i context
Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM

1 Stimmen

Haben Sie die akzeptierte Antwort nicht gelesen? Sie wiederholen nur, was bereits zu einer fast 10 Jahre alten Frage gesagt wurde...

9 Stimmen

Oh, tut mir leid, Yokai. Aber ich habe nichts darüber gelesen, dass man den Hilfebereich von grep durchsuchen muss, um die Antwort zu finden.

1 Stimmen

@Yokai Abgesehen von dem, was Chiel ten Brinke sagte, werden in der akzeptierten Antwort die langen Optionen nicht erwähnt

19voto

Rose Punkte 2572

Wenn Sie häufig nach Codes suchen, AG der Silbersucher ist viel effizienter (d.h. schneller) als grep.

Sie zeigen Kontextzeilen an, indem Sie die -C Option.

Beispiel:

ag -C 3 "foo" myFile

line 1
line 2
line 3
line that has "foo"
line 5
line 6
line 7

2 Stimmen

Auf welchem System (inkl. Distributionsname und Version) haben Sie es ausprobiert? Wurde es standardmäßig installiert? Wenn nicht, wie lauten einige Installationsanweisungen? Es ist nicht standardmäßig installiert auf Ubuntu MATE 20.04 (Focal Fossa).

15voto

Malcolm Boekhoff Punkte 912

Suche nach "17655" in /some/file.txt mit 10 Zeilen Kontext vorher und nachher (mit Awk ), Ausgabe mit vorangestellter Zeilennummer, gefolgt von einem Doppelpunkt. Verwenden Sie dies unter Solaris, wenn grep unterstützt nicht die -[ACB] Optionen.

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;

12voto

franzisk Punkte 1529

Ich mache es auf die kompakte Art:

grep -5 string file

Das ist das Äquivalent zu:

grep -A 5 -B 5 string file

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X