Найти все строки с ключевым словом и извлечь номер

Я хотел бы найти строку, которая начинается со слова: "ОШИБКИ" и извлечь число из этой строки.

Часть файла:

...
[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 напечатать последнее поле
Другие вопросы по тегам