Найти все строки с ключевым словом и извлечь номер
Я хотел бы найти строку, которая начинается со слова: "ОШИБКИ" и извлечь число из этой строки.
Часть файла:
...
[ERROR] No keywords and test cases defined in file
File path: libraries_instances.robot
TEST SUITES SUMMARY:
ERRORS: 148
WARNINGS: 89
CS VIOLATIONS: 201
Мое решение:
grep ERRORS .validation.log | grep -o -E '[0-9]+'
Можно ли сделать его лучше и использовать только один grep?
Наконец, я хотел бы присвоить это значение переменной в моем скрипте bash.
1 ответ
Решение
Поскольку linux
тег присутствует в вопросе, если предположить, GNU grep
с -P
опция доступна
$ grep -oP 'ERRORS.*\h\K\d+' .validation.log
148
ERRORS.*\h\K
здесь\K
опция помогает пометить начальную точку регулярного выражения.. строка, соответствующая этой точке, не будет частью вывода- также обратите внимание, что
man grep
предупреждает об использовании-P
как экспериментальный, но я до сих пор не сталкивался с какой-либо проблемой.. (см. https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep для известныхGNU grep
проблемы)
Альтернативное решение с использованием awk
$ awk '/ERRORS:/ && NF==2{print $NF}' .validation.log
148
/ERRORS:/ && NF==2
строка соответствия, содержащаяERRORS:
и имеет только два поля (по умолчанию одно или несколько смежных пробелов является разделителем полей)print $NF
напечатать последнее поле