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
[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.