Biblioteca Online : ¡La Suscripción ENI por 9,90 € el primer mes!, con el código PRIMER9. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Programación shell en Unix/Linux
  3. El comando sed
Extrait - Programación shell en Unix/Linux ksh, bash, estándar POSIX (con ejercicios corregidos) (5ª edición)
Extractos del libro
Programación shell en Unix/Linux ksh, bash, estándar POSIX (con ejercicios corregidos) (5ª edición) Volver a la página de compra del libro

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

El símbolo "images/symbol.PNG" que se utiliza en los ejemplos representa la tecla [Espacio].

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 '/ˆ[images/symbol.PNG\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...