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
$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 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
Sustitución
$ sed 's/linea/fila/g' fichero fila primera fila segunda fila tercera fila cuarta fila quinta
$ sed 's/ //g' fichero lineaprimera lineasegunda lineatercera lineacuarta lineaquinta
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