Как найти слово перед совпадением

У меня есть следующий файл журнала. Мне нужно знать, есть ли какие-либо неисправности / подозрительные условия, используя сценарий оболочки.

Мне нужно найти ошибку и проверить предыдущее слово, если оно больше 0, значит, есть работа для администратора базы данных.

Checking pubs2: Logical pagesize is 4096 bytes
DBCC CHECKSTORAGE for database 'pubs2' sequence 17 completed at Oct 21 2015  3:17PM. 4 faults and 0 suspect conditions were located. 0 checks were aborted. You should investigate the recorded faults, and plan a course of action that will correct them.

Я уже пробовал следующие команды в оболочке Linux / Bash, и они работают хорошо.

FLTCNT=`cat $MAILLOG | grep -oP '\S+(?=\s+faults and)'`
SPTCNT=`cat $MAILLOG | grep -oP '\S+(?=\s+suspect)'`

if [ $FLTCNT -gt 0 ] || [ $SPTCNT -gt 0 ] ; then
    FAILED="Y"
#   echo "Fault / suspect conditions found"
    cat $MAILLOG >> $ERRLOG
fi

Но когда я выполняю то же самое на сервере AIX, я получаю сообщение об ошибке

grep: illegal option -- o
grep: illegal option -- P
usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] -e pattern_list...
    [-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...]
    -f pattern_file... [file...]
-2
16.12.2018, 13:38
1 ответ

Предположим, вы хотите что-то сделать, если любая из двух строк X faultsи Y suspectдля любых положительных целых значений Xи Y, не равных 0, существует в файле $MAILLOG.

if grep -qwE '([1-9]|[0-9]{2,}) (faults|suspect)' "$MAILLOG"; then
    # do something
fi

Шаблон ([1-9]|[0-9]{2,})будет соответствовать либо одной цифре больше нуля, либо любому числу с двумя или более цифрами.

Шаблон (faults|suspect)будет соответствовать либо строке faults, либо suspect. Если вы хотите включить туда checks, просто используйте (faults|suspect|checks).

Опция -qдля grepотключает любой вывод, кроме -ошибки, который утилита в противном случае выдавала бы (нас интересует только статус выхода grep, т.е. соответствовать шаблону или нет ).

Опция -wзаставляет grepвыполнять "поиск слов". В данном случае это означает, что он найдет 10 faults, а не подстроку 0 faults, так как ноль в 10не начинает новое «слово», а 1. Это также означает, что строка 2 faultsmen(, хотя маловероятно, что строка ), не вызовет совпадения.

Параметр -Eнеобходим для поддержки расширенных регулярных выражений с использованием чередования(|).

0
28.01.2020, 05:18

Теги

Похожие вопросы