Chciałbym napisać grep
ciąg, ale także pokazać poprzednie pięć wierszy i kolejne pięć wierszy, a także dopasowaną linię. Jak mógłbym to zrobić?
search
logging
grep
command-line-interface
Mark Harrison
źródło
źródło
man grep | grep -C 1 context
:)man grep | grep -C 1 "\-C"
;)Odpowiedzi:
W przypadku BSD lub GNU
grep
można użyć,-B num
aby ustawić liczbę linii przed dopasowaniem i-A num
liczbę linii po dopasowaniu.Jeśli chcesz mieć taką samą liczbę linii przed i po, możesz użyć
-C num
.To pokaże 3 linie przed i 3 linie po.
źródło
-A
i-B
będzie działać, jak będzie-C n
(dlan
linii kontekstu), lub po prostu-n
(dlan
linii kontekstu ... o ile n wynosi od 1 do 9).źródło
-n
format i okazało się, że działa tylko do9
. Na15
to zwraca 5 linii-A
,-B
lub-C
). Zwykle po specyfikatorze opcji znajduje się wartość (-o a.out
określająca plik wyjściowy w GCC), ale może również działać jako zwykły przełącznik / flaga (-g
aby umożliwić debugowanie informacji w GCC). Jednak odstępy między opcjami są opcjonalne, więc w przypadku opcji bez wartości można je scalić (-ABC
), co oznacza, że-15
jest interpretowany-1 -5
(dwie oddzielne opcje) i-5
zastępuje-1
.ack działa z podobnymi argumentami jak grep i akceptuje
-C
. Ale zwykle lepiej jest przeszukiwać kod.źródło
grep
, nie jest pewne użycie go do „reklamowania się”ack
(co jest naprawdę świetnym narzędziem) - to dobry pomysł…Spowoduje to wstawienie „myfile” do „astring” i wyświetlenie 5 linii przed i po każdym meczu
źródło
Zwykle używam
Wiele narzędzi, takich jak grep, ma również naprawdę świetne pliki man. Znalazłem się powołując się na stronie man grep wiele, ponieważ jest tak wiele można zrobić z nim.
Wiele narzędzi GNU ma także stronę informacyjną, która może zawierać bardziej przydatne informacje oprócz strony man.
źródło
Użyj grep
źródło
Wyszukaj „17655” w „/some/file.txt”, pokazując kontekst 10 linii przed i po (używając Awk), dane wyjściowe poprzedzone numerem linii, a następnie dwukropkiem. Użyj tego w systemie Solaris, gdy „grep” nie obsługuje opcji „- [ACB]”.
źródło
ripgrep
Jeśli zależy Ci na wydajności, użyj
ripgrep
podobnej składnigrep
, npIstnieją również parametry takie jak
-A
/--after-context
i-B
/--before-context
.Narzędzie zostało zbudowane na silniku regularnym Rust, co czyni go bardzo wydajnym w przypadku dużych danych.
źródło
Oto rozwiązanie @Ygor w
awk
Uwaga: Zamień
a
ib
zmienne z liczbą linii przed i po.Jest to szczególnie przydatne dla systemu, który nie obsługuje grepa
-A
,-B
i-C
parametry.źródło
-5
wyświetla5
linie powyżej i poniżej dopasowania „ciąg znaków” jest równoważny z-C 5
lub-A 5 -B 5
.źródło
Grep ma opcję o nazwie
Context Line Control
, możesz jej użyć--context
, po prostulub
Powinien załatwić sprawę
źródło
Robię to w zwarty sposób
To jest odpowiednik
źródło
Jeśli często wyszukujesz kod, AG srebrny wyszukiwarka jest znacznie wydajniejszy (tj. Szybszy) niż grep.
Wyświetlane są linie kontekstu za pomocą opcji -C.
Na przykład:
źródło