Eliminación de líneas específicas de un archivo en la línea de comandos de Linux

La tarea es sencilla. Debe eliminar líneas específicas de un archivo de texto en la terminal de Linux.

Puede usar un editor de texto como Vim o Nano, ingrese el archivo y elimine las líneas deseadas. Sin embargo, este enfoque no es adecuado para la automatización utilizando bash guiones.

En su lugar, puede utilizar el potente editor de línea de comandos sed y eliminar líneas que coincidan con criterios específicos. Y, por supuesto, puede usar sed en sus scripts de shell.

Permítanme mostrar algunos casos de uso.

⚠️Los ejemplos que se muestran aquí modificarán el archivo original al instante. Sería una buena idea hacer una copia de seguridad de ese archivo antes de comenzar a experimentar con él.

Quitar la enésima línea del archivo

Imagine que tiene que eliminar el número de la séptima línea en un archivo. Puede usar el comando sed de esta manera:

                      
                        sed -i '7d' filename
                      
                    

Déjame explicarte cómo funciona:

  • -i : Esta opción habilita la edición en el lugar. De forma predeterminada, sed solo mostrará la salida. Con este -i opción, modifica el archivo real sin mostrarlo en la pantalla.
  • 7d : Aquí 7 es el número de línea y d indica la eliminación de la línea.
  • filename : Este es el archivo que desea modificar. También puede proporcionar una ruta absoluta o relativa si el archivo está en algún otro directorio.

Déjame mostrarte con un verdadero example. Aquí hay un archivo de texto de muestra llamado agatha.txt:

                      
                        The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
Giant's Bread
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies
                      
                    

Para eliminar la cuarta línea de este archivo, uso:

                      
                        sed '4d' agatha.txt
                      
                    

Esto dará como resultado la siguiente pantalla con la línea ‘Giant’s Bread’ eliminada:

                      
                        The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord Edgware Dies
                      
                    

Ahora, supongamos que desea eliminar la primera línea del archivo en la línea de comandos de Linux. Usa sed así:

                      
                        sed -i '1d' filename
                      
                    

?Si desea ver el resultado de la manipulación sin modificar el archivo en sí, no use el -i opción del comando sed.

Eliminar la última línea usando sed

Aprendió a eliminar una línea en particular, pero ¿qué sucede si necesita eliminar la última línea?

Siempre puede obtener el número total de líneas en un archivo usando el comando wc y usar este número con sed. Sin embargo, sed tiene una forma dedicada de eliminar la última línea de un archivo. Ya no necesita preocuparse por la cantidad de archivos ahora.

                      
                        sed -i '$d' filename.txt
                      
                    

Eliminar un rango de líneas

Similar a lo que vio anteriormente, también puede eliminar un rango de líneas del archivo.

Suponga que tiene que eliminar las líneas de 11 a 15, puede proporcionar el rango de esta manera:

                      
                        sed -i '11,15d' filename
                      
                    

Tenga en cuenta que también eliminará las líneas 11 y 15, no solo las líneas que se encuentran entre ellas.

Eliminar líneas que contienen una cadena

También puede usar sed para eliminar todas las líneas que contienen una cadena determinada o que coinciden con un patrón específico.

El siguiente comando eliminará todas las líneas que contengan la palabra ‘cadena’:

                      
                        sed -i '/string/d' filename
                      
                    

Tenga en cuenta que esta es una búsqueda que distingue entre mayúsculas y minúsculas. También puede usar un patrón de expresiones regulares en lugar de una cadena normal.

Eliminar líneas que comienzan con una palabra

Si desea eliminar todas las líneas que comienzan con una palabra o letra en particular, solo tiene que proporcionar el patrón de expresión regular como este:

                      
                        sed -i '/^word/d' filename
                      
                    

Consejo adicional: elimine todas las líneas vacías

Antes de terminar este artículo, permítanme compartir rápidamente cómo puede eliminar todas las líneas vacías usando sed:

                      
                        sed -i '/^$/d' filename
                      
                    

Espero que encuentre útil este consejo rápido para eliminar líneas del archivo de texto en la línea de comandos de Linux.

Si está interesado, obtenga más información sobre el editor de línea de comandos sed:

Related Posts