Eliminar líneas con el comando 'sed' en Linux: en blanco...

Eliminar líneas con el comando 'sed' en Linux: en blanco...

El comando "sed" de Linux nos permite realizar diversos cambios en un archivo: eliminar líneas vacías, también aquellas duplicadas, caracteres y la última línea del fichero, entre otros. En este artículo te enseñamos cómo hacerlo.

¿Cómo eliminar líneas con "sed"?

A continuación, os mostramos varios ejemplos de uso:

  • Eliminación de la tercera línea:
sed '3d' mi_fichero.txt
  • Eliminación de la línea conteniendo la cadena "awk":
sed '/awk/d' mi_fichero.txt
  • Eliminación de la última línea:
sed '$d' mi_fichero.txt
  • Eliminación de todas las líneas vacías:
sed '/^$/d' mi_fichero.txt sed '/./!d' mi_fichero.txt
  • Eliminación de la línea conteniendo una expresión regular:
sed '/[0-9/][0-9]*$/d' mi_fichero.txt
  • Eliminación del intervalo comprendido entre las líneas 7 y 9:
sed '7,9d' mi_fichero.txt
  • Lo mismo que el anterior, pero esta vez la dirección es reemplazada por una ocurrencia:
sed '/-Inicio/,/-Fin/d' mi_fichero.txt

¿Cómo hacer modificaciones permanentes y eliminar caracteres?

Los ejemplos precedentes únicamente modifican la visualización del archivo. Para realizar modificaciones permanentes en las antiguas versiones (<4) debe utilizarse un fichero temporal. Para GNU sed debe utilizarse el parámetro -i[sufijo] como en el siguiente ejemplo:

sed -i".bak" '3d' mi_fichero.txt

No mostrará el resultado en la salida estándar y modificará el fichero original "mi_fichero.txt" eliminando la tercera línea y creando un fichero de respaldo llamado "mi_fichero.txt.bak".

Por otro lado, para eliminar caracteres específicos de manera permanente de un archivo usando el comando sed, sigue estos pasos:

  1. Abre la terminal.
  2. Escribe:
    sed -i 's/[caracteres_a_eliminar]//g' mi_fichero.txt
  3. Reemplaza "caracteres_a_eliminar" con los caracteres que deseas eliminar y "mi_fichero.txt" con el nombre del archivo que deseas modificar. ¡Y listo! 

¿Cómo eliminar líneas repetidas de un fichero en Linux?

Si deseas eliminar líneas repetidas de un archivo en Linux, hay diversas herramientas y comandos que te pueden ayudar. Aquí te presentamos algunas opciones:

  • Usando uniq: el comando uniq se utiliza para filtrar o eliminar líneas repetidas de un archivo que estén adyacentes (es decir, las líneas repetidas deben estar una después de la otra). Si no estás seguro de si las líneas repetidas son adyacentes, puedes utilizar el comando sort antes de uniq.
sort mi_fichero.txt | uniq > mi_fichero_sin_repetidos.txt
  • Usando awk: awk es una herramienta poderosa que permite realizar operaciones complejas en archivos de texto. Para eliminar líneas repetidas, puedes usar el siguiente comando:
awk '!visto[$0]++' mi_fichero.txt > mi_fichero_sin_repetidos.txt

En este caso, awk crea un array llamado "visto" y, para cada línea que lee ($0), verifica si ya la ha "visto" antes. Si es la primera vez que ve esa línea, la imprime. Si ya la ha visto antes, la omite.

  • Usando sed: aunque sed no es la herramienta más eficiente para eliminar líneas duplicadas (debido a que está diseñada principalmente para manipulación de texto basada en patrones), es posible combinarla con otros comandos para conseguir este objetivo. Sin embargo, las opciones anteriores son más adecuadas para esta tarea.

Te recomendamos utilizar uniq o awk, ya que son más directos y eficientes para este propósito.

¿Cómo puedo reemplazar una cadena de texto en un archivo usando sed?

Para reemplazar una cadena de texto en un archivo usando sed, puedes usar la siguiente sintaxis:

sed 's/cadena_original/cadena_nueva/g' archivo.txt

Aquí hay una descomposición del comando:

  • s: indica el comando de sustitución.
  • cadena_original: es la cadena o patrón que deseas reemplazar.
  • cadena_nueva: es la cadena con la que deseas reemplazar cadena_original.
  • g: indica que todos los casos de cadena_original en una línea deben ser reemplazados (sin la g, sólo la primera aparición en cada línea se reemplazaría).
  • archivo.txt: es el archivo que deseas procesar.

Si deseas guardar los cambios directamente en el archivo, puedes usar la opción -i:

sed -i 's/cadena_original/cadena_nueva/g' archivo.txt

Nota: Recuerda hacer una copia de seguridad de tus archivos antes de modificarlos directamente con sed -i, especialmente si estás trabajando en archivos importantes.

¿Tienes más preguntas acerca de Linux? Consulta nuestro foro 

Linux