Utilisation de sed pour supprimer une ligne entière si elle ne contient qu'un numéro spécifique

8

J'ai un fichier txt

123
456
789
456
123456

Je veux supprimer des caractères spécifiques du fichier, c'est-à-dire (123). J'ai essayé avec

$ sed -i '/123/d' dummy.sh
$ vi dumm.txt
456
789
456

Dans la commande ci-dessous lorsque j'exécute, les mots ( 123et 123456) sont supprimés, mais je dois supprimer uniquement 123du fichier

$ sed -i 's/123//g' dummy.sh
$ vi dumm.txt
456
789
456
456

lorsque j'exécute la commande ci-dessous, le 123devient remplacé par null.

Quelqu'un peut-il dire comment supprimer une ligne entière si elle ne contient qu'un numéro spécifique?

Rak kundra
la source
2
En un mot - ancres
steeldriver
je n'ai pas obtenu ce que vous demandez?
Rak kundra
1
Notez que bien qu'il soit parfaitement correct d'utiliser sed pour cette tâche, grep est l'outil qui a été créé spécifiquement pour afficher ou masquer les lignes d'entrée correspondant au modèle. Dans ce cas, la commande grep suivante ferait de même: grep -E -v '^ 123 $' dumm.txt
Gnudiff
4
@Gnudiff Je ne vois aucun avantage grepà utiliser comme ça. Mais il peut être supérieur pour certaines tâches en raison de ses options:grep -xv 123
Philippos

Réponses:

19

Il n'est pas clair si vous essayez de supprimer toute la ligne avec 123ou de la remplacer par une ligne vide. Quoi qu'il en soit, ajoutez simplement des ancres de début ^et de fin $de ligne à votre modèle:

sed -i '/^123$/d' dummy.sh      #delete whole line
sed -i 's/^123$//' dummy.sh     #replace with empty line
jimmij
la source
Ouais j'ai eu ma réponse merci :). J'essaie de supprimer toute la ligne ici.
Rak kundra