El comando sed
Presentación
El comando sed (stream editor) es un editor de texto no interactivo. Permite automatizar el tratamiento de archivos de texto. Este capítulo presenta las principales funcionalidades del comando.
Uso del comando sed
Sintaxis básica
sed [-n] acción [ arch1 ... ]
sed [-n] -e acción1 [ -e acción2 ... ] [ arch1 ... ]
sed -f script-sed [ arch1 ... archn ]
Las acciones especificadas se ejecutan en cada línea del archivo. El resultado del tratamiento se mostrará por la salida estándar. Si múltiples acciones se especifican en la línea de comandos, cada una de ellas estará precedida con la opción -e.
El comando sed no modifica el archivo de origen.
Sintaxis de una acción
[dirección[,dirección]]comando[argumentos]
Una acción se compone sintácticamente de:
-
Una parte de dirección que permite especificar sobre qué líneas se debe ejecutar el comando.
-
El comando que se va a ejecutar.
-
Los argumentos del comando.
Sintaxis de una dirección
Tipo de dirección |
Líneas tratadas |
Ninguna dirección |
Todas las líneas. |
Direcciones de tipo 1 |
|
n |
Línea n. |
$ |
Última línea. |
/ERb/ |
Líneas correspondientes a la expresión regular. |
Direcciones de tipo 2 |
|
n1,n2 |
Línea n1 hasta línea n2. |
/ERb1/,/ERb2/ |
La primera línea tratada será la primera que se corresponda con ERb1. El tratamiento seguirá sobre todas las líneas hasta que sed encuentre una línea que se corresponda con ERb2. Esta última también se tratará. |
Sintaxis del comando...
Ejemplos
1. Uso de sed en línea de comandos
A continuación se muestra el contenido del archivo que se usará en los ejemplos siguientes:
$ cat tel2.txt
Méndez Roca, Gisela|calle Ruiseñor|28023|Madrid|915351478
Ruiz del Castillo, Marcos|calle Balmes|08020|Barcelona|932282177
Hernández Darín, Alberto|plaza mayor|13190|Corral de Calatrava|
926448829
Gómez Bádenas, Josefina|calle Sagasta|13190|Corral de Calatrava|
926443602
Martínez Parra, Marta|calle de la Santa Trinidad|38870|La Calera|
984122119
Expósito Heredia, Pedro|calle del castillo|38870|La Calera|
984122369
$
a. El comando d (delete)
El comando d impide que se muestren las líneas seleccionadas en la parte de dirección.
Ejemplo
No mostrar las líneas blancas:
$ sed '/ˆ[\t]*$/d' tel2.txt
o
$ sed '/^[[:espacio:]]*$/d' tel2.txt
Méndez Roca, Gisela|calle Ruiseñor|28023|Madrid|915.351.478
Ruiz del Castillo, Marcos|calle Balmes|08020|Barcelona|
932.282.177
Hernández Darín, Alberto|plaza mayor|13190|Corral de Calatrava|
926/448/829
Gómez Bádenas, Josefina|calle Sagasta|13190|Corral de Calatrava|
926.443.602
Martínez Parra, Marta|calle de la Santa Trinidad|38870|La Calera|
984.122.119
Expósito Heredia, Pedro|calle del castillo|38870|La Calera|
984.122.369
$
Une línea blanca puede ser una línea vacía o una línea que contenga una serie de espacios o tabulaciones. La expresión [:espacio:] representa un carácter espacio o tabulación (ver el capítulo Anexos - Clases de caracteres POSIX).
b. El comando p (print)
El comando p permite mostrar por pantalla las líneas seleccionadas desde la parte de dirección. Por defecto, sed muestra igualmente todo el contenido del archivo. Para modificar este comportamiento, hay que usar la opción -n.
Ejemplo
Mostrar las líneas 1 a 2. Por defecto, sed muestra además el contenido del archivo. Las líneas solicitadas aparecen dos veces:...
Ejercicios
Los archivos proporcionados para los ejercicios están disponibles en la carpeta dedicada al capítulo, en el directorio Ejercicios/Archivos.
1. Expresiones regulares
a. Ejercicio 1: inserción de marcadores en un archivo
Sea el archivo fechas_curs.txt:
$ cat fechas_curs.txt
unix
28-30 ene
17-19 jun
18-20 nov
shell
23 mar
15 jul
7 sep
Empleando el comando sed, transforme este archivo de la siguiente forma:
unix
<date>28-30 ene</date>
<date>17-19 jun</date>
<date>18-20 nov</date>
shell
<date>23 mar</date>
<date>15 jul</date>
<date>7 sep</date>
b. Ejercicio 2: formato de archivos
Tome el archivo .bash_profile (proporcionado). Muestre el archivo con el comando nl, que numera las líneas:
$ nl .bash_profile
1 # .bash_profile
2 # Get the aliases and functions
3 if [ -f ~/.bashrc ]; then
4 . ~/.bashrc
5 fi
6 # User specific environment and startup programs
7 PATH=$PATH:$HOME/bin
1. |
Elimine... |