supprimer les lignes qui contiennent un texte spécifique dans un fichier

Jai un fichier avec une liste de-mails et chaque ligne contient un e-mail. Je souhaite supprimer les lignes contenant la chaîne example.com ou test.com.

Jai essayé ceci:

sed -i "s/example\.com//ig" file.txt 

Mais il supprimera uniquement la chaîne example.com, comment puis-je supprimer la ligne entière?

Réponse

Avec GNU sed:

sed "/example\.com/d;/test\.com/d" -i file.txt 

supprimera les lignes avec example.com et test.com.

De man sed:

d Delete pattern space. Start next cycle. 

Commentaires

  • Cela supprimera également la ligne contenant example (ou test) suivi de nimporte quel caractère puis com. Exemple echo 'exampleAcom' | sed '/example.com/d'
  • Gah, idiot de ne pas méchapper distraitement. Merci de lavoir remarqué!

Réponse

POSIXly, vous pouvez utiliser grep:

grep -Eiv "(example|test)\.com" <in >out 

Commentaires

  • Veillez à ne pas utiliser le même fichier pour lentrée et la sortie , ou il sera tronqué avant que grep puisse le lire.

Réponse

Votre expression régulière correspond uniquement à example.com et sed remplace uniquement les example.com par des valeurs vides chaîne de caractères. Votre expression régulière doit correspondre à nimporte quelle ligne contenant example.com ou test.com

sed -i "s@.*\(test\|example\)\.com.*@@i" file.txt 

Commentaires

  • Votre la réponse ne supprime pas les lignes correspondantes; cela ne fait que les rendre vides. – Il ne gère pas non plus le texte insensible à la casse (comme dans lexemple de OP '). -. Le g est redondant / sans signification, car sed ‍ ' s regex est gourmand et donc les .* de début et de fin feront correspondre la première occurrence dune correspondance de texte à toute la ligne. ‍
  • Merci pour vos commentaires. Je nai ' pas prêté attention à la sensibilité à la casse. g cest mon habitude, vous avez raison, ce nest pas nécessaire. Jai aussi pensé que cétait ce que voulait OP. Maintenant, tout est clair. Merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *