8  Edición de archivos con el editor de flujo sed

sed (stream editor) es un editor de flujo, una potente herramienta de tratamiento de texto para el sistema operativo UNIX que acepta como entrada un archivo, lo lee y modifica línea a línea de acuerdo a un script. sed permite manipular flujos de datos, como por ejemplo cortar líneas, buscar y reemplazar texto (con soporte de expresiones regulares ), entre otras cosas.

Algunas de las operaciones más primordiales de sed son el cambio de saltos de líneas, la sustitución de espacios por comas o tabulaciones, la deleción o adición de strings, etc.

La sintaxis general de la orden sed es:

sed [-n] [-e'script'] [-f archivo] archivo1 archivo2 ...

donde:

Explicación
  • -n indica que se suprima la salida estándar.
  • -e indica que se ejecute el script que viene a continuación.
  • -f indica que las órdenes se tomarán de un archivo.

Ejemplo de sustitución con sed

Sustituciones s/// de palabras: s/esto/aquello/

echo "Windows es lo máximo" | sed -e 's/Windows/Linux/'

En el ejemplo anterior, la modificación se hace solamente en la primer instancia que el comando encuentra. Esto no nos funciona si tenemos 400 repeticiones de Windows que queremos cambiar a Linux. Para que funcione debemos hacer un cambio de la siquiente manera:

echo "Windows es un sistema operativo ampliamente utilizado." > archivo.txt
cat archivo.txt
sed 's/Windows/Linux/g' archivo.txt

Esta letra g que agregamos, indica hacer las sustituciones de manera global, es decir en todas las ocurrencias o repeticiones dentro de un archivo.

Ejercicio 8: Práctica de sustituciones
  1. Verifica que te encuentres en la carpeta “~/unix.bioinfo.rsgecuador-gh-pages/_filespwd
  2. Cámbiate de carpeta si es necesario cd ~/unix.bioinfo.rsgecuador-gh-pages/_files
  3. En esta carpeta podrás encontrar el archivo “notas.txt”, explora este archivo cat notas.txt ó less notas.txt ó head notas.txt
  4. Sustituye la palabra “Notas” de cada una de las columnas por la palabra “Columna” y una vez hecho el cambio redirige el resultado a un archivo llamado “columnas.txt”. sed 's/Notas/Columnas/g' notas.txt >> columnas.txt
  5. Corrobora tus resultados y discute posibles soluciones alternas.

Como pudiste darte cuenta, el archivo está separado por tabulaciones entre columna y columna. Si quisieras además, cambiar el formato del archivo de separación por tabulaciones a separación por comas, ¿qué pasos extra agregarías a tu código? Discute qué hace cada parte del código.

sed 's/Notas/Columnas/' -e 's/\t/,/g' notas.txt >> columnas.txt

8.0.1 Referencias