¿Qué es la opción G en Sed?

“El término sed es una abreviatura de stream editor . En UNIX/Linux, el comando sed analiza y transforma flujos (textos, en la mayoría de los casos). Es una herramienta de línea de comandos que viene preinstalada en todos los sistemas UNIX/Linux”.

En esta guía, exploraremos la opción G en sed .

Uso básico de Sed

El uso más común del comando sed es buscar y reemplazar contenido en una secuencia determinada. La estructura de mando es la siguiente:

$ sed ‘s/<patrón_a_buscar>/<texto_de_reemplazo>/’ < flujo_a_editar >

 
Echa un vistazo al siguiente ejemplo:

$ echo «el rápido zorro marrón» | sed ‘s/el/EL/’

 

Aquí,

    • El comando echo imprime la cadena dada en STDOUT . En Bash, STDOUT, STDIN y STDERR son flujos de datos incorporados.
    • El comando sed usa STDOUT como flujo, funciona según lo especificado e imprime el resultado en la consola.

Si está intentando editar un archivo de texto, sed no cambiará el contenido del archivo de forma predeterminada. Esto es para evitar la pérdida accidental de datos. Para cambiar el contenido de un archivo directamente, debe ejecutar sed con edición en el lugar .

La opción g en Sed

Al buscar y reemplazar, el comportamiento predeterminado de sed es finalizar sus acciones al encontrar la primera instancia. El siguiente ejemplo demuestra perfectamente este comportamiento:

$ echo «el el el el» | sed ‘s/el/EL/’

 

Aquí,

    • Usando el comando echo , estamos pasando la misma palabra «el» varias veces al comando sed .
    • Sin embargo, en la salida, solo la primera instancia de «the» se transforma en «THE».

Para indicar a sed que transforme todas las instancias coincidentes del patrón dado, debemos agregar la opción g. Actualice el comando de la siguiente manera:

$ echo «el el el el» | sed ‘s/el/EL/g’

 

Ahora, todas las instancias de «the» se cambian a «THE» correctamente.

La opción G en Sed

Finalmente llegamos al punto central de esta guía. Mientras que la opción g es aplicable para la sustitución de texto, la opción G se usa para un propósito completamente diferente.

Usando la opción G , podemos agregar espacio de retención al espacio de patrón. En términos simples, podemos agregar nuevas líneas antes o después del patrón coincidente.

Para demostración, he creado un archivo de texto de muestra test.txt :

gato << EOF > prueba.txt

el
marrón

rápido
el
zorro
EOF

 

Espaciado adicional

Ahora podemos realizar varias operaciones en el espaciado del archivo. Por ejemplo, para duplicar el espacio del archivo, use el siguiente comando:

$ sed G prueba.txt

 

Del mismo modo, podemos triplicar el espacio del archivo:

$ sed ‘G;G’ prueba.txt

 

Aquí,

    • En ambos casos, debido a que no proporcionamos ningún patrón con el que coincidir, sed coincide con todos los textos del archivo.
    • El comando sed funciona línea por línea en un flujo de texto determinado. Después de hacer coincidir cada línea (porque no se proporcionó un patrón específico), se agrega una nueva línea.

Eliminación de espacios adicionales

También podemos usar la opción G para borrar todas las líneas en blanco y doble espacio:

$ sed ‘G;G’ prueba.txt | sed ‘/^$/d;G’

 

Insertar líneas en blanco antes/después de los partidos

Podemos especificar un patrón usando una expresión regular y decirle a sed que agregue una línea en blanco antes o después.

El primer ejemplo será agregar una línea en blanco debajo del patrón coincidente:

$ sed ‘/la/G’ prueba.txt

 

El siguiente ejemplo será agregar una línea en blanco sobre el patrón coincidente:

$ sed ‘/el/{x;p;x;}’ prueba.txt

 

Finalmente, podemos combinar ambos para insertar líneas en blanco alrededor del patrón coincidente:

$ sed ‘/el/{x;p;x;G;}’ prueba.txt

 

Pensamientos finales

En esta guía, demostramos con éxito varias formas de usar la opción G con sed para agregar espacios en el texto. Esta técnica puede ser útil en varias situaciones, por ejemplo, al seleccionar líneas específicas en un registro de depuración.

Una gran ventaja de sed es su compatibilidad con expresiones regulares. Obtenga más información sobre sed con expresiones regulares . El comando sed también se puede integrar fácilmente en scripts de shell .

¡Feliz computación!