Domanda regex con matching negativo (cioè, trova una stringa che _non corrisponde alla regex)


Ho un file di registro con la stringa "ERRORE" su alcune righe. Voglio cancellare ogni riga non lo fa avere ERRORE in modo che io possa vedere solo ciò che deve essere corretto. Stavo per fare qualcosa di simile a ciò che segue in vim:

% S /! (ERROR) //

per sostituire le righe non di errore con una stringa vuota.

Non credo che le regex standard possano farlo, ma forse ho torto ...


30
2017-07-22 00:10


origine


risposte:


Usa il :g! comando per cancellare ogni riga che non corrisponde.

:g!/ERROR/d

52
2017-07-22 00:15



In vim, è possibile eseguire qualsiasi comando di filtro sul testo nel buffer. Per esempio,

:%!grep ERROR

sostituirà l'intero buffer con solo le linee che corrispondono all'espressione regolare data.

Questo è utile per più di appena grepper esempio puoi ordinare le linee nel buffer con :%!sort. Oppure, puoi fare lo stesso per qualsiasi campo di testo usando il V comando per contrassegnare il blocco e poi :!filter-command (Vim si riempirà automaticamente '<,'> per poter indicare il blocco attualmente contrassegnato).


8
2017-07-22 00:35



se su * nix, puoi usare grep -v o awk

awk '!/ERROR/' file | more 

su una macchina Windows, puoi usare findstr

findstr /v /c:ERROR file | more

1
2017-07-22 00:32



Usare un lookahead negativo lavorato.


1
2018-04-05 18:26



Una regex di corrispondenza negativa utilizzerà ^ Per es. [^ E] abbinerà tutto eccetto E.


0
2017-07-22 00:19