
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 faults
y Y suspect
para cualquier valor entero positivo X
y Y
no igual a 0
existe 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 faults
o suspect
. Si desea incluirlo checks
allí también, simplemente use (faults|suspect|checks)
.
La -q
opción de grep
desactiva 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 -w
opción hace grep
realizar una "búsqueda de palabras". En este caso, significa que encontrará 10 faults
en lugar de la subcadena, 0 faults
ya que el cero 10
no inicia una nueva "palabra", pero sí lo 1
hace. También significa que la cadena 2 faultsmen
(por improbable que sea) no desencadenaría una coincidencia.
Es -E
necesario 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