viernes, 7 de diciembre de 2012

Comando sed

Orden Sed

Sintaxis: sed [-f fichero_ordenes] [-n] [archivo]

La herramienta sed es un editor de flujo(stream editor) utilizado para manipular archivos de texto. Sed copia los archivos especificados en la salida estándar después de procesarlos. Este procesamiento de los archivos de entrada se lleva a cabo línea por línea, acorde con las órdenes dadas a sed. Podemos destacar que sed no modifica los archivos de entrada. Las órdenes que procesa sed pueden ser aportadas explícitamente desde la línea de órdenes, o bien éstas pueden residir en un archivo. En este último caso, utilizamos la opción -f y a continuación el nombre del fichero de órdenes. La opción -n será empleada siempre que deseemos evitar la salida por pantalla de la línea que está procesando(por defecto sed visualiza las líneas que procesa, aunque no haga nada)

El aspecto general de las órdenes sed es el siguiente:
[dirección [, dirección ]] función [argumentos]
En éstas se indica la dirección (número de línea) o rango de direcciones a las cuales se debe aplicar la función indicada con sus posibles argumentos.
La mejor manera de entender el funcionamiento de sed es mediante ejemplos, veamos:
Creamos un fichero que contenga el siguiente texto



$ cat fichero
linea primera
linea segunda
linea tercera

linea cuarta
linea quinta


Seleccionar una línea

En este primer ejemplo, imprimimos por pantalla la línea número 3. y especificamos la función p(print), con esto se mostrará lo siguiente.

$sed 3p fichero
linea primera
linea segunda
linea tercera
linea tercera

linea cuarta
linea quinta

Como vemos, sed imprime las líneas del archivo, y la número 3 sale duplicada, por ser la línea que indicamos a sed que sea procesada (impresa en pantalla). Si ahora eliminamos la salida normal con la opción -n, conseguiremos mostrar sólo la línea indicada.

$ sed -n 3p fichero
linea tercera

Seleccionar un rango

En este ejemplo imprimiremos desde la línea 2 hasta la 3.

$ sed -n 2,3p fichero
linea segunda
linea tercera
Los rangos de direcciones, o las direcciones, pueden ser también especificados en forma de expresión regular. De esta manera se podría imprimir desde la primera línea que comienza con un determinado carácter hasta que se encuentre una línea que esté en blanco o algo similar.

$ sed -n /primera$/,$p fichero
linea primera

En el ejemplo anterior mostramos todas las líneas que acaban con la palabra primera. Mediante expresiones regulares también podemos especificar un rango de direcciones, por ejemplo: 



$ sed -n '/segunda$/,$p' fichero
linea segunda
linea tercera

linea cuarta
linea quinta
En este caso desde la linea que acaba con segunda hasta la última línea del fichero, representada por $.


Sustitución

Con la opción s podemos sustituir palabras y con la opción g para indicar que se aplique en todo el documento, por ejemplo
$ sed 's/linea/fila/g' fichero
fila primera
fila segunda
fila tercera

fila cuarta
fila quinta

En el siguiente ejemplo eliminaremos todos los espacios en blanco.

$ sed 's/ //g' fichero
lineaprimera
lineasegunda
lineatercera
lineacuarta
lineaquinta

Operador &

Se sustituye por el patrón reconocido
Ejemplo:
reemplaza primera por <primera>


$ sed 's/primera/<&>/g' fichero
linea <primera>
linea segunda
linea tercera
linea cuarta
linea quinta
Eliminar líneas

Para eliminar desde la línea 1 a la 3.



$ sed '1,3d' fichero

linea cuarta
linea quinta

Si quisiéramos eliminar las líneas que terminan con era:



$ sed '/era$/d' fichero
linea segunda

linea cuarta
linea quinta
Fichero con órdenes

Si creamos un fichero que contenga la siguiente línea



$cat orden
s/a/XXX/g

Al indicarle a sed que utilize este archivo de órdenes para procesar otros archivos, cualquier carácter a será sustituido por XXX. Por ejemplo:

$ sed -f ord fichero
lineXXX primerXXX
lineXXX segundXXX
lineXXX tercerXXX
lineXXX cuXXXrtXXX
lineXXX quintXXX

Insertar y cambiar líneas


Insertar antes de una línea:



$sed '/segunda$/i\ insertamos linea antes' fichero
linea primera linea
insertamos linea antes
linea segunda
linea tercera
linea cuarta
linea quinta

Insertar un línea después de la línea que coincida con el patron.



$ sed '/segunda$/a\ insertamos linea despues' fichero
linea primera linea
linea segunda
insertamos linea despues
linea tercera
linea cuarta
linea quinta

Con la opción c podemos sustituir las lineas que cumplan con el patron




$ sed '/segunda$/c\ sustituimos la linea' fichero
linea primera linea
sustituimos la linea
linea tercera
linea cuarta
linea quinta

No hay comentarios:

Publicar un comentario