Ho un file con un elenco di email e ogni riga contiene unemail. Voglio rimuovere le righe che contengono la stringa example.com
o test.com
.
Ho provato questo:
sed -i "s/example\.com//ig" file.txt
Ma rimuoverà solo la stringa example.com
, come posso rimuovere lintera riga?
Risposta
Con GNU sed:
sed "/example\.com/d;/test\.com/d" -i file.txt
rimuoverà le righe con example.com
e test.com
.
Da man sed
:
d Delete pattern space. Start next cycle.
Commenti
Risposta
POSSIBILMENTE, puoi utilizzare grep
:
grep -Eiv "(example|test)\.com" <in >out
Commenti
- Fai attenzione a non utilizzare lo stesso file per input e output oppure verrà troncato prima che
grep
possa leggerlo.
Risposta
La tua espressione regolare trova solo example.com
e sed
sostituisce solo example.com
con vuoto corda. La tua espressione regolare deve corrispondere a qualsiasi riga contenente example.com o test.com
sed -i "s@.*\(test\|example\)\.com.*@@i" file.txt
Commenti
- Il tuo la risposta non cancella le righe corrispondenti; li rende solo vuoti. – Inoltre non gestisce il testo senza distinzione tra maiuscole e minuscole (come nellesempio di OP '). -. La
g
è ridondante / priva di significato, perchésed
' s regex è avida e quindi il.*
iniziale e finale farà sì che la prima occorrenza di una corrispondenza di testo corrisponda allintera riga. - Grazie per il feedback. Non ' ho prestato attenzione alla sensibilità alle maiuscole.
g
è la mia abitudine, hai ragione, non è necessario. Inoltre ho pensato, la linea di soppressione era ciò che voleva OP. Adesso è tutto chiaro. Grazie
example
(otest
) seguito da un carattere, quindicom
. Esempioecho 'exampleAcom' | sed '/example.com/d'