/ / Znajdź wszystkie linie ze słowem kluczowym i liczbą wyciągów - linux, bash, grep, przetwarzanie tekstu

Znajdź wszystkie linie z słowem kluczowym i liczbą wyciągów - linux, bash, grep, przetwarzanie tekstu

Chciałbym znaleźć wiersz zaczynający się od słowa: "BŁĘDY" i numer exctract z tej linii.

Część pliku:

...
[ERROR] No keywords and test cases defined in file
File path: libraries_instances.robot

TEST SUITES SUMMARY:
ERRORS:        148
WARNINGS:      89
CS VIOLATIONS: 201

Moje rozwiązanie to:

grep ERRORS .validation.log | grep -o -E "[0-9]+"

czy można to zrobić lepiej i używać tylko jednego grep?

Na koniec chciałbym przypisać tę wartość do zmiennej w moim skrypcie basha.

Odpowiedzi:

2 dla odpowiedzi № 1

Od linux znacznik jest obecny w pytaniu, zakładając GNU grep z -P opcja jest dostępna

$ grep -oP "ERRORS.*hKd+" .validation.log
148
  • ERRORS.*hK tutaj K opcja pomaga zaznaczyć punkt początkowy wyrażenia regularnego .. dopasowany do tego momentu nie będzie częścią wyjścia
  • również to zauważ man grep ostrzega przed używaniem -P jako eksperymentalne, ale do tej pory nie spotkałem się z żadnym problemem (zobacz https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep na znane GNU grep zagadnienia)


Alternatywne rozwiązanie przy użyciu awk

$ awk "/ERRORS:/ && NF==2{print $NF}" .validation.log
148
  • /ERRORS:/ && NF==2 dopasuj linię zawierającą ERRORS: i ma tylko dwa pola (domyślnie jeden lub więcej sąsiadujących białych znaków jest ogranicznikiem pola)
  • print $NF wydrukuj ostatnie pole