Cómo encontrar la palabra antes de un partido

Cómo encontrar la palabra antes de un partido

Tengo el siguiente archivo de registro. Necesito saber si hay alguna condición de falla o sospecha usando un script de shell.

Necesito encontrar fallas y verificar la palabra anterior, si es mayor que 0 entonces hay trabajo para el DBA.

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.

Ya probé los siguientes comandos en el shell de Linux/Bash y están funcionando bien.

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

Pero cuando ejecuto lo mismo en un servidor AIX aparece un error

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...]

Respuesta1

Suponiendo que desea hacer algo si alguna de las dos cadenas X faultsy Y suspectpara cualquier valor entero positivo Xy Yno igual a 0existe en el archivo $MAILLOG.

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

El patrón ([1-9]|[0-9]{2,})coincidiría con un solo dígito mayor que cero o con cualquier número con dos o más dígitos.

El patrón (faults|suspect)coincidiría con la cadena faultso suspect. Si desea incluirlo checksallí también, simplemente use (faults|suspect|checks).

La -qopción de grepdesactiva cualquier salida sin error que la utilidad produciría de otro modo (solo estamos interesados ​​en el estado de salida de grep, es decir, si pudo coincidir con el patrón o no).

La -wopción hace greprealizar una "búsqueda de palabras". En este caso, significa que encontrará 10 faultsen lugar de la subcadena, 0 faultsya que el cero 10no inicia una nueva "palabra", pero sí lo 1hace. También significa que la cadena 2 faultsmen(por improbable que sea) no desencadenaría una coincidencia.

Es -Enecesario para admitir expresiones regulares extendidas que utilizan alternancia ( |).

Respuesta2

Podrías intentar usar grep:

grep -c "your word to match" /log/file

P.ej:

$ grep -c "upgraded" /var/log/pacman.log 
244

información relacionada