Pytanie grep plik, ale pokaż kilka otaczających linii?


chciałbym grep dla ciągu, ale także pokazuje poprzednie pięć linii i pięć następnych linii oraz dopasowaną linię. Jak mógłbym to zrobić?


2756
2017-08-12 17:55


pochodzenie


Trzymam kopię Brendan Gregg's perl script do tego celu. Działa dobrze. - Ethan Post
Aby znaleźć rozwiązanie działające na Solaris, sprawdź ten link. - jahroy
man grep | grep -C 1 context :) - StvnW
man grep | grep -C 1 "\-C" ;) - Anders B


Odpowiedzi:


Dla BSD lub GNU ANTYLOPA  grep możesz użyć -B num aby ustawić liczbę linii przed meczem i -A num dla liczby linii po meczu.

grep -B 3 -A 2 foo README.txt

Jeśli chcesz taką samą liczbę linii przed i po użyciu -C num.

grep -C 3 foo README.txt

Spowoduje to wyświetlenie 3 linii przed i 3 linii po.


3679
2017-08-12 17:57



Jest dobry, ale niestety, grep Solaris go nie obsługuje. Zobacz ten link dla solaris: unix.com/solaris/33533-grep-display-few-lines-before-after.html - рüффп
Ok, ale co, jeśli chcesz pokazać wszystko linie wyjściowe po meczu? grep -A0 i grep -A-1 nie przecinają ... - g33kz0r
nie działa dla mnie z jakiegoś powodu, chociaż wspomniano na moich stronach man. - Hayri Uğur Koltuk
Jeśli jesteś środowiskiem HP-UX, żadna z wersji grep nie działa tak jak w systemie Solaris. Był w stanie użyć linku Solaris, ale zamień nawk na awk w tym linku. - zkarthik
-n jest dla numerów linii, ale dla niektórych wersji grep -n # pokaże # otaczające linie (jak -c) z numerami linii. To przydatny skrót, który jest moim celem, gdy potrzebuję kontekstu. - Anthony DiSanti


-A i -B będzie działać, jak będzie -C n (dla n linie kontekstu) lub po prostu -n (dla n linie kontekstu).


520
2017-08-12 17:59



+1 -5 jest szybszy do wpisania niż -A 5 -B 5 - mouche


ack działa z podobnymi argumentami jak grep i akceptuje -C. Ale zwykle lepiej jest przeszukiwać kod.


66
2017-09-07 11:13



ack obsługuje również -A -B. - Shuo
Ack jest lepszy niż grep na wiele sposobów. Jest szybszy dzięki prostszej składni. - chim


grep astring myfile -A 5 -B 5

To będzie grep "myfile" dla "astring" i pokaż 5 linii przed i po każdym meczu


32
2017-08-12 17:58



"grep astring myfile -C 5" zrobi to samo - Syed Siraj Uddin


Normalnie używam

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

Wiele narzędzi, takich jak grep, ma również naprawdę świetne pliki dla man. Odnoszę się do tego grep's man page dużo, ponieważ jest tak wiele, że możesz z tym zrobić.

man grep

Wiele narzędzi GNU posiada również strona informacyjna może zawierać więcej użytecznych informacji oprócz strony podręcznika.

info grep

16
2017-08-12 18:42





Wyszukaj "17655" w "/some/file.txt" pokazującym kontekst 10 wierszy przed i po (używając Awk), wynik poprzedzony numerem linii, po którym następuje dwukropek. Użyj tego w systemie Solaris, gdy "grep" nie obsługuje opcji "- [ACB]".

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;

8
2017-10-08 00:21





Użyj grep

$ 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

5
2018-01-12 11:25



Czy nie przeczytałeś zaakceptowanej odpowiedzi? Powtarzasz to, co już zostało powiedziane na pytanie prawie 10 lat ... - Yokai
Och, przepraszam Yokai. Ale nie czytam niczego na temat pomocy w grep, aby uzyskać odpowiedź. - Chiel ten Brinke


ripgrep

Jeśli zależy Ci na wydajności, użyj ripgrep który ma podobną składnię do grep, np.

rg -C5 "pattern" .

-C, --context NUM - Pokaż NUM wierszy przed i po każdym meczu.

Istnieją również parametry, takie jak -A/--after-context i -B/--before-context.

Narzędzie jest zbudowane na Rdzeniowy silnik regex co sprawia, że ​​jest bardzo wydajny na dużych danych.


2
2018-04-11 10:28