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 № 1Od 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
tutajK
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 znaneGNU 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