Cześć Jestem bardzo nowy w programowaniu basha. Chcę znaleźć sposób wyszukiwania w danym tekście. Do tego używam grep
funkcji:
grep -i "my_regex"
To działa. Ale biorąc pod uwagę data
to:
This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Kiedy już znalazłem słowo error
(używając grep -i error data
), chciałbym znaleźć 10 wierszy następujących po nim error
. Więc mój wynik powinien wyglądać następująco:
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Czy są na to sposoby?
error
.Odpowiedzi:
Możesz użyć
-B
i,-A
aby wydrukować linie przed i po dopasowaniu.Wyświetli 10 wierszy przed dopasowaniem, w tym samą pasującą linię.
źródło
test=$(grep -i -B 10 'error' data)
i wydrukować je przy użyciuecho $test
, otrzymuję proste długie linie jako dane wyjściowe.echo "$test"
a nieecho $test
-C 10
wydrukuje 10 wierszy przed AND po za jednym zamachem!Spowoduje to wypisanie 10 wierszy kontekstu końcowego po pasujących wierszach
Jeśli chcesz wydrukować 10 linii wiodącego kontekstu przed dopasowaniem linii,
A jeśli chcesz wydrukować 10 wierszy początkowego i końcowego kontekstu wyjściowego.
Przykład
Normalny grep
Grep dokładnie pasujące wiersze i 2 wiersze po
Grep dokładnie pasujące wiersze i 2 wiersze przed
Grep dokładnie pasujące wiersze i 2 wiersze przed i po
Odniesienie: manpage grep
źródło
Sposób na zrobienie tego znajduje się u góry strony podręcznika
źródło
Spróbuj tego:
-A 10 oznacza, wypisuje dziesięć wierszy po dopasowaniu do „my_regex”
źródło