Use isto: grep 'php\s\+\(error\|notice\).*winner' mylogfile
Eu tenho um arquivo de log com entradas como as seguintes:
Entrada
php notice bob
php notice winner
php notice blah winner
php notice asfsdf test
php erro)r bob
php error winner
php error trash winner
php error junk test
print this line
Saída
php notice winner
php notice blah winner
php error winner
php error trash winner
print this line
O que estou tentando fazer é corresponder todas as linhas de um arquivo de log, a menos que ele contenha php
seguido por error
ou notice
. Se ele contiver php
seguido por error
ou notice
, só deverá coincidir se winner
também estiver na sequência. Meu regex-foo é fraco. Obrigado.
Use isto: grep 'php\s\+\(error\|notice\).*winner' mylogfile
Pode haver uma maneira de fazer com que o grep retire isso em uma string, mas acho que, pessoalmente, eu faria script para lidar com isso em perl ou bash. No bash seria algo como
while read line
do
# If line contains "php error" or "php notice" and "winner", print it, else skip it
if echo $line | grep "php error" >/dev/null || echo $line | grep -q "php notice" >/dev/nulll; then
if echo $line | grep "winner" > /dev/null; then
echo $line
fi
else
# If line does not contain "php error" or "php notice", print it.
echo $line
fi
done
Eu não tenho um sistema prático para testar / depurar isso agora, então você pode ter que ajustar um pouco.