jak grep i wydrukować kolejne N wierszy po trafieniu?


16

Chciałbym pozdrowić wystąpienie w pliku tekstowym, a następnie wydrukować następujące N wierszy po każdym znalezionym wystąpieniu. Jakieś pomysły?

Odpowiedzi:


23

Grep ma następujące opcje, które pozwolą ci to zrobić (i podobne rzeczy). Możesz zajrzeć na stronę podręcznika, aby uzyskać więcej informacji:

  • -A num Wydrukuj liczbę linii kontekstu końcowego po każdym dopasowaniu. Zobacz także opcje -B i -C.

  • -B num Wydrukuj liczbę linii wiodącego kontekstu przed każdym dopasowaniem. Zobacz także opcje -A i -C.

  • -C [num] Drukuj num linii wiodącego i końcowego kontekstu otaczającego każde dopasowanie. Domyślnie jest to 2 i jest równoważne -A 2 -B 2. Uwaga: między opcją a jej argumentem nie można podać białych znaków.


7

Jeśli masz GNU grep, jest to opcja -A/ --after-context. W przeciwnym razie możesz to zrobić za pomocą awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename

1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- działa, twoje nie.
BladeMight


3

Wydrukuj N linii po dopasowaniu linii

Możesz użyć grepz -A nopcją drukowania N linii po dopasowaniu linii.

Na przykład:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

Inne powiązane opcje:

Wydrukuj N linii przed dopasowaniem linii

Za pomocą -B nopcji możesz wydrukować N linii przed dopasowaniem linii.

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

Wydrukuj N linii przed i po dopasowaniu linii

Za pomocą -C nopcji możesz wydrukować N linii przed i po dopasowaniu linii.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.