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?


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

Sí, recibí mi respuesta gracias :). Estoy tratando de eliminar toda la línea aquí.
Rak kundra
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.