Este artículo es parte de la serie de tutoriales en curso sobre el comando sed de Unix. En nuestros artículos anteriores, aprendimos sed con comandos únicos:imprimir, eliminar, sustituir y escribir archivos.
Sed proporciona muchos comandos para realizar varias operaciones con las líneas de un archivo.
En este artículo, revisemos cómo agregar, insertar, reemplazar una línea en un archivo y cómo obtener los números de línea de un archivo.
- Anexar líneas
- Insertar líneas
- Reemplazar líneas
- Contar líneas
Primero creemos el archivo geekstuff.txt que se usará en todos los ejemplos mencionados a continuación.
$cat thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Agregar líneas usando el comando Sed
Sed proporciona el comando "a" que agrega una línea después de cada línea con la dirección o el patrón.
Syntax: #sed 'ADDRESS a\ Line which you want to append' filename #sed '/PATTERN/ a\ Line which you want to append' filename
Ejemplo 1 de adición de Sed. Agregue una línea después de la tercera línea del archivo.
Agregue la línea "Aparatos y sitios web geniales" después de la tercera línea. El comando sed "a" inserta la línea después de la coincidencia.
$ sed '3 a\ > Cool gadgets and websites' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Cool gadgets and websites Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Append Example 2. Agregue una línea después de cada línea que coincida con el patrón
El siguiente comando sed agregará la línea "Linux Scripting" después de cada línea que coincida con el patrón "Sysadmin".
$ sed '/Sysadmin/a \ > Linux Scripting' thegeekstuff.txt Linux Sysadmin Linux Scripting Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc. Linux Scripting
Sed Append Example 3. Agregue una línea al final del archivo
El siguiente ejemplo agrega la línea "Diseño de sitio web" al final del archivo.
$ sed '$ a\ > Website Design' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc. Website Design
Insertar líneas usando el comando Sed
El comando Sed "i" se usa para insertar una línea antes de cada línea con el rango o patrón.
Syntax: #sed 'ADDRESS i\ Line which you want to insert' filename #sed '/PATTERN/ i\ Line which you want to insert' filename
Ejemplo de inserción de Sed 1. Agregue una línea antes de la cuarta línea de la línea.
Agregue una línea "Aparatos y sitios web geniales" antes de la cuarta línea. El comando "a" inserta la línea después de la coincidencia, mientras que "i" inserta antes de la coincidencia.
$ sed '4 i\ > Cool gadgets and websites' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Cool gadgets and websites Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Ejemplo 2 de inserción de Sed. Inserta una línea antes de cada línea con el patrón
El siguiente comando sed agregará una línea "Linux Scripting" antes de cada línea que coincida con el patrón llamado "Sysadmin".
$ sed '/Sysadmin/i \ > Linux Scripting' thegeekstuff.txt Linux Scripting Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Linux Scripting Windows- Sysadmin, reboot etc.
Ejemplo de inserción de Sed 3. Inserte una línea antes de la última línea del archivo.
Agregue una línea "Diseño del sitio web" antes de la última línea del archivo.
$ sed '$ i\ > Website Design' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Website Design Windows- Sysadmin, reboot etc.
Reemplazar líneas usando el comando Sed
El comando "c" en sed se usa para reemplazar cada línea que coincida con el patrón o rangos con la nueva línea dada.
Syntax: #sed 'ADDRESS c\ new line' filename #sed '/PATTERN/ c\ new line' filename
Ejemplo 1 de reemplazo de Sed. Reemplace una primera línea del archivo
El siguiente comando reemplaza la primera línea del archivo con "The Geek Stuff".
$ sed '1 c\ > The Geek Stuff' thegeekstuff.txt The Geek Stuff Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Ejemplo 2 de reemplazo de Sed. Reemplace una línea que coincida con el patrón
Reemplace todas las líneas que tengan un patrón "Linux Sysadmin" por "Linux Sysadmin - Scripting".
$ sed '/Linux Sysadmin/c \ > Linux Sysadmin - Scripting' thegeekstuff.txt Linux Sysadmin - Scripting Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Ejemplo 3 de reemplazo de Sed. Reemplace la última línea del archivo
El comando Sed que se proporciona a continuación reemplaza la última línea del archivo con "Última línea del archivo".
$ sed '$ c\ > Last line of the file' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Last line of the file
Imprimir números de línea usando el comando Sed
“=” es un comando en sed para imprimir el número de línea actual en la salida estándar.
Syntax: #sed '=' filename
La sintaxis del comando de envío anterior imprime el número de línea en la primera línea y la línea original del archivo en la línea siguiente.
El comando sed '=' acepta solo una dirección, por lo que si desea imprimir el número de línea para un rango de líneas, debe usar las llaves.
Syntax: # sed -n '/PATTERN/,/PATTERN/ { = p }' filename
Ejemplo de número de línea Sed 1. Encuentre el número de línea que contiene el patrón
El siguiente comando sed imprime el número de línea que coincide con el patrón "Bases de datos"
$ sed -n '/Databases/=' thegeekstuff.txt 2
Ejemplo 2 de número de línea Sed. Rango de impresión de números de línea
Imprima los números de línea para las coincidencias de líneas del patrón "Oracle" a "Productividad".
$ sed -n '/Oracle/,/Productivity/{ > = > p > }' thegeekstuff.txt 2 Databases - Oracle, mySQL etc. 3 Security (Firewall, Network, Online Security etc) 4 Storage in Linux 5 Productivity (Too many technologies to explore, not much time available)
Ejemplo 3 de número de línea Sed. Imprime el número total de líneas en un archivo
El número de línea de la última línea del archivo será el total de líneas en un archivo. Patrón $ especifica la última línea del archivo.
$ sed -n '$=' thegeekstuff.txt 6