GNU/Linux >> Tutoriales Linux >  >> Linux

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

Este artículo forma parte de la serie actual de consejos y trucos de Unix Sed.

Como cualquier otro lenguaje de programación, sed también proporciona comandos de bifurcación especiales para controlar el flujo del programa.

En este artículo, revisemos los siguientes dos tipos de bifurcación Sed.

  1. Rama incondicional de Sed
  2. Rama Condicional Sed

Sintaxis de rama incondicional Sed:

$ sed ':label command(s) b label'
  • :label – especificación de la etiqueta.
  • comandos:cualquier comando sed
  • etiqueta:cualquier nombre para la etiqueta
  • etiqueta b – salta a la etiqueta sin verificar ninguna condición. Si no se especifica la etiqueta, salta al final del script.

Sintaxis de rama condicional de Sed:

$ sed ':label command(s) t label'
  • :label – especificación de la etiqueta.
  • comandos:cualquier comando sed
  • etiqueta:cualquier nombre para la etiqueta
  • etiqueta t – salta a la etiqueta solo si el último comando de sustitución modificó el espacio del patrón. Si no se especifica la etiqueta, salta al final del script.

Cree un archivo de prueba de muestra

Primero creemos el archivo geekstuff.txt que se usará en los ejemplos que se mencionan a continuación.

$ cat thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
$

Yo. Ejemplos de Sed para rama incondicional

Ejemplo 1 de Sed. Reemplace la primera aparición de un patrón en un archivo completo

En el archivo thegeekstuff.txt, reemplace la primera aparición de "Administración" por "Supervisión".

$ sed '/Administration/{
 s/Administration/Supervision/
 :loop
 n
 b loop
 }' thegeekstuff.txt
Linux
	Supervision
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
  1. En el comando sed anterior, solo lee línea por línea e imprime el espacio del patrón hasta que ocurre la Administración.
  2. Una vez que se produce la administración, sustituya la administración por la supervisión (una sola ocurrencia, tenga en cuenta que no hay un indicador 'g' en la sustitución).
  3. Una vez que se haya reemplazado la primera ocurrencia, simplemente lea el contenido restante del archivo e imprima.
    • “n” es un comando sed que imprime el espacio del patrón y lo sobrescribe con la siguiente línea.
    • Usó "bucle" como etiqueta. “n” imprime la línea actual y sobrescribe el espacio del patrón con la siguiente línea. b loop salta al :loop de nuevo. Entonces este ciclo imprime el contenido restante de thegeekstuff.txt.

Ejemplo 2 de Sed. Eliminar los datos entre el patrón ” ” en un archivo completo

En nuestro archivo de ejemplo, hay tres líneas entre "".

sed -e ':loop
$!{
N
/\n$/!b loop
}
s/\"[^\"]*\"//g' thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online\
        Security
Productivity
        Google Search\
        Tips
$
  1. El comando anterior keep agrega todas las líneas de un archivo hasta que se produce el final del archivo.
    • $! – Si no es un final de archivo.
    • N:agregue la siguiente línea con el espacio del patrón delimitado por \n
    • /\n$/!b loop:si esta no es la última línea del archivo, vuelva al bucle.
  2. Ahora todas las líneas estarán disponibles en un patrón de espacio delimitado por nueva línea. Sustituya todas las ocurrencias de datos entre ” con el vacío.

Ejemplo Sed 3. Eliminar las etiquetas HTML de un archivo

Digamos que tengo un archivo con el siguiente contenido html

$ cat index.html
<html><body>
<table
border=2><tr><td valign=top
align=right>1.</td>
<td>Line 1 Column 2</
td>
</table>
</body></html>

El siguiente comando sed elimina todas las etiquetas html del archivo dado

$ sed '/</{
:loop
s/<[^<]*>//g
/</{
N
b loop
}
}' index.html

1.
Line 1 Column 2
  1. Cada vez que encuentre una línea que contenga '<', primero elimine todas las etiquetas HTML de esa línea.
  2. Si ahora el espacio del patrón contiene '<', esto implica una etiqueta de varias líneas. Ahora repita el siguiente bucle:
    • Unirse a la siguiente línea
    • Eliminar todas las etiquetas HTML hasta que no exista un solo '<'
  3. Cuando no existe un '<' en el espacio del patrón, lo imprimimos y comenzamos un nuevo ciclo.

II. Ejemplos de Sed para rama condicional

Ejemplo 4 de Sed. Si una línea termina con una barra invertida, agréguele la siguiente línea.

Nuestro archivo de ejemplo tiene dos líneas que terminan con una barra invertida, ahora tenemos que agregarle la siguiente línea.

$ sed '
:loop
/\\$/N
s/\\\n */ /
t loop' thegeekstuff.txt
Linux
        Administration
        Scripting
                Tips and Tricks
Windows
        Administration
Database
        Administration of Oracle
        Administration of Mysql
Security
        Network
                 Online Security
Productivity
        Google Search Tips
        "Web Based Time Tracking,
        Web Based Todo list and
        Reduce Key Stores etc"
  1. Verifique si la línea termina con la barra invertida (/\\$/), si es así, lea y agregue la siguiente línea al patrón de espacio, y sustituya \ al final de la línea y la cantidad de espacios seguidos por eso, con el espacio simple.
  2. Si la sustitución es exitosa, repita el paso anterior. La bifurcación se ejecutará solo si la sustitución es exitosa.
  3. Rama condicional utilizada principalmente para patrones recursivos.

Ejemplo 5 de Sed. Comuníquese una cadena numérica.

 sed '
 :loop
 s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/
 t loop'
12342342342343434
12,342,342,342,343,434
  1. Agrupa los dígitos en dos grupos.
  2. El primer grupo son todos los dígitos hasta los últimos tres dígitos. Los últimos tres dígitos obtienen capturas en el segundo grupo.
  3. Luego, los dos grupos coincidentes se separan con una coma. Luego se aplican las mismas reglas a la línea una y otra vez hasta que todos los números se hayan agrupado en grupos de tres.
  4. Por ejemplo, en la primera iteración será 12342342342343,434
  5. En la siguiente iteración 12342342342,343,434 y continúa hasta que haya menos de tres dígitos.

Ejemplo 6 de Sed. Formato:Reemplace cada espacio inicial de una línea con '+'

$ sed '
s/^ */&\n/
:loop
s/^\n//;s/ \n/\n+/
t loop' test
Linux
++++++++Administration
++++++++Scripting
++++++++++++++++Tips and Tricks
Windows
++++++++Administration
Database
++++++++Administration of Oracle
++++++++Administration of Mysql
Security
++++++++Network
+++++++++++++++++Online\
++++++++Security
Productivity
++++++++Google Search\
++++++++Tips
++++++++"Web Based Time Tracking,
++++++++Web Based Todo list and
++++++++Reduce Key Stores etc"
  1. Separe todos los espacios iniciales y otros caracteres de una línea con un carácter de nueva línea.
  2. Ahora reemplace espacio y nueva línea con nueva línea y +. Entonces, de derecha a izquierda, el espacio será reemplazado por + y la nueva línea se moverá a la izquierda para un carácter.
  3. Por fin, al principio de la línea \n estará allí, así que elimine esa nueva línea.

Linux
  1. Tutorial de comando cd de Linux para principiantes (8 ejemplos)

  2. Tutorial de comandos de comunicación de Linux para principiantes (5 ejemplos)

  3. Tutorial de comando Linux df para principiantes (8 ejemplos)

  4. Tutorial de comando de fecha de Linux para principiantes (8 ejemplos)

  5. Tutorial de Linux du Command para principiantes (10 ejemplos)

Tutorial de comando Linux w para principiantes (5 ejemplos)

Tutorial de comandos ss de Linux para principiantes (8 ejemplos)

Tutorial de expresiones regulares para ejemplos de Linux (Sed y AWK)

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

Tutorial de Unix Sed:7 ejemplos de operaciones Sed Hold y Pattern Buffer

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