Stream Editor - Sintaxis básica

Este capítulo presenta los comandos básicos que admite SED y su sintaxis de línea de comandos. La SED se puede invocar de las dos formas siguientes:

sed [-n] [-e] 'command(s)' files 
sed [-n] -f scriptfile files

El primer formulario permite especificar los comandos en línea y se incluyen entre comillas simples. La última permite especificar un archivo de script que contiene comandos SED. Sin embargo, podemos usar ambas formas juntas varias veces. SED proporciona varias opciones de línea de comandos para controlar su comportamiento.

Veamos cómo podemos especificar varios comandos SED. SED proporcionadeletecomando para borrar ciertas líneas. Eliminemos las líneas 1ª, 2ª y 5ª. Por el momento, ignore todos los detalles del comando de eliminación. Discutiremos más sobre el comando de eliminación más adelante.

Primero, muestre el contenido del archivo usando el cat mando.

[jerry]$ cat books.txt

Al ejecutar el código anterior, obtiene el siguiente resultado:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

Ahora indique al SED que elimine solo ciertas líneas. Aquí, para eliminar tres líneas, hemos especificado tres comandos separados con la opción -e.

[jerry]$ sed -e '1d' -e '2d' -e '5d' books.txt

Al ejecutar el código anterior, obtiene el siguiente resultado:

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864

Además, podemos escribir varios comandos SED en un archivo de texto y proporcionar el archivo de texto como argumento a SED. SED puede aplicar cada comando en el búfer de patrones. El siguiente ejemplo ilustra la segunda forma de SED.

Primero, cree un archivo de texto que contenga comandos SED. Para facilitar la comprensión, utilicemos los mismos comandos SED.

[jerry]$ echo -e "1d\n2d\n5d" > commands.txt 
[jerry]$ cat commands.txt

Al ejecutar el código anterior, obtiene el siguiente resultado:

1d 
2d 
5d

Ahora indique al SED que lea los comandos del archivo de texto. Aquí, logramos el mismo resultado que se muestra en el ejemplo anterior.

[jerry]$ sed -f commands.txt books.txt

Al ejecutar el código anterior, obtiene el siguiente resultado:

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones,George R. R. Martin, 864

Opciones estándar

SED admite las siguientes opciones estándar:

  • -n: Impresión predeterminada del búfer de patrones. Por ejemplo, el siguiente comando SED no muestra ningún resultado:

  • [jerry]$ sed -n '' quote.txt
  • -mi : El siguiente argumento es un comando de edición. Aquí, los corchetes angulares implican un parámetro obligatorio. Al usar esta opción, podemos especificar múltiples comandos. Imprimamos cada línea dos veces:

  • [jerry]$ sed -e '' -e 'p' quote.txt

Al ejecutar el código anterior, obtiene el siguiente resultado:

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist 
 - Paulo Coelho, The Alchemist
  • -F : El siguiente argumento es un archivo que contiene comandos de edición. Los corchetes angulares implican parámetro obligatorio. En el siguiente ejemplo, especificamos el comando de impresión a través del archivo:

[jerry]$ echo "p" > commands 
[jerry]$ sed -n -f commands quote.txt

Al ejecutar el código anterior, obtiene el siguiente resultado:

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

Opciones específicas de GNU

Repasemos rápidamente las opciones de SED específicas de GNU. Tenga en cuenta que estas opciones son específicas de GNU; y puede que no sea compatible con otras variantes del SED. En secciones posteriores, analizaremos estas opciones con más detalle.

  • -n, --quiet, --silent: Igual que la opción -n estándar.

  • -e script, --expression = script: Igual que la opción -e estándar.

  • -f archivo-script, --file = archivo-script: Igual que la opción -f estándar.

  • --follow-symlinks: si se proporciona esta opción, el SED sigue los enlaces simbólicos mientras edita los archivos en su lugar.

  • -i [SUFIJO], --in-place [= SUFIJO]: esta opción se usa para editar el archivo en su lugar. Si se proporciona el sufijo, se realiza una copia de seguridad del archivo original; de lo contrario, se sobrescribe el archivo original.

  • -l N, --line-lenght = N: Esta opción establece la longitud de la línea para el comando l en N caracteres.

  • --posix: esta opción desactiva todas las extensiones GNU.

  • -r, --regexp-extended: esta opción permite utilizar expresiones regulares extendidas en lugar de expresiones regulares básicas.

  • -u, --unbuffered: cuando se proporciona esta opción, el SED carga una cantidad mínima de datos de los archivos de entrada y vacía los búferes de salida con más frecuencia. Es útil para editar la salida de "tail -f" cuando no desea esperar la salida.

  • -z, --null-data: De forma predeterminada, el SED separa cada línea con un carácter de nueva línea. Si se proporciona la opción NULL-data, separa las líneas por caracteres NULL.