GNU/Linux >> Tutoriales Linux >  >> Linux

Tutorial de Unix Sed:operación de archivos de varias líneas con 6 ejemplos prácticos

Como parte de nuestra serie de tutoriales UNIX sed en curso anterior, cubrimos la impresión, eliminación, sustitución, escritura de archivos, comandos de manipulación de archivos, etc., con una sola línea en el espacio del patrón.

En este artículo, revisemos cómo hacer la operación multilínea en Sed.

¿Recuerdas la metodología de trabajo de Sed que aprendimos en nuestro primer tutorial de sed?. En ese artículo, explicamos que Sed lee línea por línea, elimina cualquier línea nueva final, coloca una línea en un búfer de espacio de patrón, procesa según los comandos dados e imprime el espacio de patrón.

En caso de que desee eliminar todas las nuevas líneas en un archivo, no puede usar el siguiente método. Porque la nueva línea ya se eliminó y se colocó en el espacio del patrón.

$ sed 's/\n//' filename or  $sed 's/\n/ENDOFLINE\n/' filename

Para situaciones como esta, sed multilínea es apropiado. Sed proporciona el comando "N" para operaciones de varias líneas.

El comando N lee la siguiente línea de la entrada, agrega la siguiente línea al espacio del patrón. La siguiente línea está separada del espacio del patrón original por un carácter de nueva línea.

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.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)


Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.
$

Nota: Hay dos líneas en blanco consecutivas en la entrada anterior. (líneas 5 y 6).

Ejemplo Sed 1. Unir dos líneas consecutivas

$ sed -e '{
N
s/\n/ @ /
}' thegeekstuff.txt

Linux Sysadmin @ Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc. @ Security (Firewall, Network, Online Security etc)
 @
Storage in Linux @ Website Design
Website Design @ Windows- Sysadmin, reboot etc.

En el ejemplo anterior,

  • Las llaves "{" y "}" utilizadas para agrupar los comandos. Las llaves y los comandos sed deben estar en líneas separadas.
  • Sed lee la primera línea y la coloca en el espacio del patrón, el comando N lee la siguiente línea y la agrega con el espacio del patrón, es decir, la primera línea separada por una nueva línea. Así que ahora el espacio de patrón tendrá primera línea\nsegunda línea.
  • Siguiente sustitución de \n a space@space e imprime el contenido del espacio del patrón como su comportamiento predeterminado de sed. Entonces las líneas consecutivas están unidas y delimitadas por ” @ “

Sed Ejemplo 2. Numere cada línea que no esté en blanco de un archivo

Como se mencionó en nuestro artículo anterior, =es un comando para obtener el número de línea de un archivo.

$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'
1 Linux Sysadmin
2 Databases - Oracle, mySQL etc.
3 Databases - Oracle, mySQL etc.
4 Security (Firewall, Network, Online Security etc)

7 Storage in Linux
8 Website Design
9 Website Design
10 Windows- Sysadmin, reboot etc.
  • El primer comando sed imprime el número de línea e imprime la línea original en una línea siguiente si no está en blanco. (Ejecutarlo y ver el resultado del primer comando sed).
  • El siguiente comando sed solo agrega un par de líneas.

Ejemplo 3 de Sed. Eliminar dos líneas en blanco consecutivas de la entrada

$ sed '/^$/{
N
/^\n$/d
}' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.

Si la línea está en blanco, lea y agregue la siguiente línea, /^\n$/ representa, dos líneas están vacías,\n se agrega mediante el comando N. Luego simplemente elimine el espacio del patrón y comience el próximo ciclo usando el comando 'd'.

Ejemplo de Sed 4. Eliminar las últimas 2 líneas de un archivo

Antes de ver este ejemplo, debe conocer dos comandos sed interesantes.

  1. P:que imprime la primera línea de un espacio de patrón. (hasta el primero \n).
  2. D:elimina la primera línea del espacio del patrón. Luego, el control pasa a la parte superior del script.
$ sed 'N;$!P;$!D;$d' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
  1. Lee la primera línea y la coloca en el espacio del patrón.
  2. El comando
  3. N lee la línea siguiente y la agrega al espacio del patrón separado por una nueva línea. (Ahora primera línea\nsegunda línea)
  4. Si no llega a la última línea ($), imprima la primera línea y elimine la primera línea sola del espacio del patrón. Entonces el ciclo comienza de nuevo.
  5. Así se une a la 2.ª\n3.ª línea, a la 3.ª\n4.ª línea y continúa.
  6. Por último, cuando tiene la línea 9\n10 en un espacio de patrón, llega a $, por lo que simplemente elimina el espacio de patrón. ($!P y $!D no se imprimirán ni eliminarán si es $).

Ejemplo Sed 5. Imprimir las últimas 2 líneas de un archivo

$ sed '$!N;$!D' thegeekstuff.txt
Website Design
Windows- Sysadmin, reboot etc.

Lo anterior une y elimina cada línea hasta que las últimas dos líneas están en el espacio del patrón. Cuando llega a $, imprime el espacio del patrón que tendrá solo las dos últimas líneas.

Ejemplo de Sed 6. Eliminar líneas consecutivas duplicadas de un archivo

El siguiente comando verifica cada línea unida con la siguiente línea, verifica si ambas son iguales, entonces no imprime el espacio del patrón (! P), simplemente elimina la primera línea del espacio del patrón. Así que solo quedará una línea en el espacio del patrón.

$ sed '$!N; /^\(.*\)\n\1$/!P; D' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
Windows- Sysadmin, reboot etc.

Linux
  1. Tutorial de comandos Linux/UNIX Awk con ejemplos

  2. 17 Comando Tar Útil con Ejemplos Prácticos en Linux

  3. Comando Diff en Linux con ejemplos

  4. Tutorial de Awk:Entienda las Variables de Awk con 3 Ejemplos Prácticos

  5. Tutorial de estado de salida de Bash Shell con ejemplos prácticos

Tutorial de Unix Sed:ejemplos avanzados de sustitución de Sed

Tutorial de Unix Sed:anexar, insertar, reemplazar y contar líneas de archivos

Tutorial de Unix Sed:6 ejemplos para la operación de bifurcación de Sed

Tutorial de introducción a Bash Scripting con 5 ejemplos prácticos

El tutorial Ultimate Tar Command con 10 ejemplos prácticos

Tutorial de funciones de Bash Shell con 6 ejemplos prácticos