Imprimir
Categoría: Unix

La utilería sed (stream editor) es un editor en línea de comando cuyo resultado será escrito en la salida estándar. Es muy funcional para realizar labores masivas o ediciones en bloque a archivos de texto, si el archivo de texto es de un tamaño considerablemente grande, la velocidad de edición de sed es sumamente conveniente.

Introducción

Le editor sed es un editor en línea que lee uno o más archivos de texto o cadenas de entrada mediante pipes, los cuales pueden ser editados de acuerdo a los comandos (scripts) que sean introducidos.

El resultado será escrito en la salida estándar, esto quiere decir que al dar la instrucción de editar algún archivo, este no será modificado, simplemente sed enviará como cadena de salida el texto de este archivo con las modificaciones indicadas en el script.

Si quisieramos escribir la salida en un archivo tendríamos que utilizar el direccionamiento > para que la salida estándar sea escrita en el archivo que le indiquemos. 

Sintaxis básica sed 

Para comenzar a utilizarlo en necesario conocer la sintaxis con la que lo usaremos en la línea de comando, aunque también puede ser utilizado mediante un script shell (Ver tutorial de Programación Shell ). La sintaxis más básica para el comando sed es como sigue:

sed [-n] script [archivo…

Donde el parámetro opcional -n suprime la salida estándar del archivo, pero para instrucciones más complejas podríamos utilizar la siguiente:

sed [-n] [-e script]… [-f archivo_script]… [archivo…]

El parámetro -e indica el script que se utilizará, y el parámetro -f indica que las instrucciones del script serán tomadas de un archivo, en caso de utiliar -f se puede omitir el uso de la opción -e. En caso de escribir los dos parámetros, los scripts serán ejecutados en el orden que fueron especificados.

Sintaxis del script

Para la escritura del script también es necesario cumplir con las reglas de sintaxis. Un script consiste en un comando de edición, y un comando por línea que deberá ser escrito como sigue:

[ ubicacion [ , ubicacion ] ] comando [ argumentos ]

El editor sed acepta espacios en blanco antes de la primera ubicación y antes del comando.

La ubicación puede ser determinada de diferentes maneras:


Comandos más utilizados

Imprimir una línea (o un rango de líneas)

Para imprimir únicamente úna línea o un rango de línea se utiliza el comando p, pero este comando solo debe utilizarse con el comando -n, con el cual se deshabilita la salida estándar. En caso de no utilizar -n la salida no será lo que esperamos.

Para este ejemplo vamos a realizar un archivo de texto de nombre ejemplo1.txt cuyo contenido será:

archivo de ejemplo linea 1
archivo de ejemplo linea 2
archivo de ejemplo linea 3

Ejemplo para imprimir únicamente la línea 2: 

$ sed -n 2p ejemplo1.txt
archivo de ejemplo linea 2

Recuerda que el número 2 le dice la ubicacion donde tiene que ejecutar la instrucción, por lo que para imprimir la líneas 2 y 3 el comando apropiado es:

$ sed -n 2,3p ejemplo1.txt
archivo de ejemplo linea 2
archivo de ejemplo linea 3

Eliminar una línea

Utilizando el mismo ejemplo del comando anterior, para quitar la línea dos utilizaríamos la instrucción:

$ sed 2d ejemplo1.txt
archivo de ejemplo linea 1
archivo de ejemplo linea 3

También podríamos eliminar la línea dos y tres con la siguiente instruccion:

$ sed 2,3d ejemplo1.txt
archivo de ejemplo linea 1

Reemplazar 

s/expresion regular/remplazo/parametros

Donde expresion regular es una cadena de texto o una expresión indicando el texto o patrón que se cambiará, reemplazo es lo que se escribirá en lugar de la     cadena anterior y parametros puede estar en blanco o ser un número indicando las veces que se aplicará el reemplazo o g para que lo aplique de forma global, es decir en todas las ocurrencias.

Ejemplo utilizando pipes para reemplazar el texto mundo por el texto planeta tierra en un comando echo:

$ echo hola mundo |sed "s/mundo/planeta tierra/"
hola planeta tierra

Este comando nos puede ser útil también para escribir un texto al principio al final de la línea, para lo cual utilizaremos las expresiones regulares ^ para indicar el comienzo de la línea y $ para indicar el final de la línea.

Ejemplos:

$ echo mundo |sed "s/^/hola /"
hola mundo


Expresiones regulares

En esta sección te presentamos un compendi de las expresiones regulares que podrás utilizar en tus scrpts de sed

c Un carácter simple, si no es espcial es comparado con el texto
* Una secuencia de 0 o más repeticiones del carácter anterior, grupo RE o clase
\+ Como * pero de 1 o más
\? Como * pero solo para 0 ó 1
\{i\} Como * pero solo cuando coincide exactamente i ocurrencias
\{i,j\} Entre i y j secuencias
\{i,\} Más o igual que i secuencias
\{,j\} Menos o igual que j secuencias
[lista] Cualquier carácter en la lista
[^lista] Cualquier carácter que no esté en la lista