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?


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

Ouais j'ai eu ma réponse merci :). J'essaie de supprimer toute la ligne ici.
Rak kundra
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.