Usar sed para eliminar una línea completa si solo contiene un número específico

8

Tengo un archivo txt

123
456
789
456
123456

Quiero eliminar caracteres específicos del archivo, es decir (123). Lo intenté con

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

En el siguiente comando cuando ejecuto ambas palabras ( 123y 123456) se eliminan, pero necesito eliminar solo 123del archivo

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

cuando ejecuto el siguiente comando, el 123está siendo reemplazado por nulo.

¿Alguien puede decir cómo eliminar una línea completa si solo contiene un número específico?

Rak Kundra
fuente
2
En una palabra - anclas
steeldriver
no entendí lo que preguntas?
Rak kundra
1
Tenga en cuenta que aunque está perfectamente bien usar sed para esta tarea, grep es la herramienta que se creó específicamente para mostrar u ocultar líneas de entrada que coinciden con el patrón. En este caso, el siguiente comando grep haría lo mismo: grep -E -v '^ 123 $' dumm.txt
Gnudiff
44
@Gnudiff No veo ninguna ventaja grepsi lo usas es así. Pero puede ser superior para algunas tareas debido a sus opciones:grep -xv 123
Philippos

Respuestas:

19

No está claro si está intentando eliminar una línea completa 123o reemplazarla con una línea vacía. De todos modos, solo agregue anclas de inicio ^y final $de línea a su patrón:

sed -i '/^123$/d' dummy.sh      #delete whole line
sed -i 's/^123$//' dummy.sh     #replace with empty line
jimmij
fuente
Sí, recibí mi respuesta gracias :). Estoy tratando de eliminar toda la línea aquí.
Rak kundra