Sto passando un elenco di modelli di espressioni regolari a grep
per verificare un file syslog. Di solito corrispondono a un indirizzo IP e una voce di registro;Grep regex NON contenente la stringa
grep "1\.2\.3\.4.*Has exploded" syslog.log
E 'solo un elenco di modelli come la parte "1\.2\.3\.4.*Has exploded"
sto passando, in un ciclo, quindi non può passare "-v", per esempio.
Sono confuso cercando di fare l'inverso di quanto sopra, un NON corrisponde a linee con un certo indirizzo IP ed errore così "! 1.2.3.4. * È esploso" corrisponderà alle linee di syslog per qualcosa di diverso da 1.2.3.4 che dice me è esploso. I deve essere in grado di includere un IP per NON corrispondere.
Ho visto vari post simili su StackOverflor, tuttavia usano schemi regex che non riesco a far funzionare con grep
. Qualcuno può fornire un esempio operativo per grep
per favore?
UPDATE: Questo sta accadendo in uno script come questo;
patterns[1]="1\.2\.3\.4.*Has exploded"
patterns[2]="5\.6\.7\.8.*Has died"
patterns[3]="\!9\.10\.11\.12.*Has exploded"
for i in {1..3}
do
grep "${patterns[$i]}" logfile.log
done
Vuoi dire che a volte * * desidera abbinare un modello, ma altre volte vuole abbinare tutto * tranne * un certo modello? (questo sembra un requisito strano, ma qualunque cosa). In tal caso, perché non si itera su due diversi elenchi di modelli? – beerbajay
Beh, non sono molto esperto in regex; Non voglio grep per "Has Exploded" perché non voglio sapere questo su ogni dispositivo di registrazione, quindi posso in qualche modo grep per "Has Exploded" e! 9.10.11.12 in una dichiarazione? – jwbensley
Se lo si deve assolutamente fare in una dichiarazione, le occhiate negative sono la strada da percorrere, come suggerisce Neil. Vedi il mio commento lì. – beerbajay