GNU/Linux >> Linux Esercitazione >  >> Linux

Tutorial Unix Sed:6 esempi per l'operazione di diramazione Sed

Questo articolo fa parte della serie Unix Sed Tips and Tricks in corso.

Come qualsiasi altro linguaggio di programmazione, sed fornisce anche speciali comandi di branching per controllare il flusso del programma.

In questo articolo, esaminiamo i seguenti due tipi di ramificazione Sed.

  1. Ramo incondizionato di Sed
  2. Ramo condizionale Sed

Sed. Sintassi del ramo incondizionato:

$ sed ':label command(s) b label'
  • :etichetta – specificazione dell'etichetta.
  • comandi – Qualsiasi comando sed
  • etichetta:qualsiasi nome per l'etichetta
  • etichetta b – salta all'etichetta senza controllare alcuna condizione. Se l'etichetta non è specificata, salta alla fine dello script.

Sintassi del ramo condizionale Sed:

$ sed ':label command(s) t label'
  • :etichetta – specificazione dell'etichetta.
  • comandi – Qualsiasi comando sed
  • etichetta:qualsiasi nome per l'etichetta
  • t etichetta – salta all'etichetta solo se l'ultimo comando sostitutivo ha modificato lo spazio del modello. Se l'etichetta non è specificata, salta alla fine dello script.

Crea un file di prova di esempio

Per prima cosa creiamo il file geekstuff.txt che verrà utilizzato negli esempi menzionati di seguito.

$ 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"
$

Io. Esempi Sed per Ramo Incondizionato

Sed Esempio 1. Sostituisci la prima occorrenza di un pattern in un intero file

Nel file thegeekstuff.txt sostituisci la prima occorrenza di "Amministrazione" con "Supervisione".

$ 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. Nel comando sed sopra, legge riga per riga e stampa lo spazio del pattern finché non si verifica l'amministrazione.
  2. Una volta che si verifica l'amministrazione, sostituire l'amministrazione con la supervisione (una sola occorrenza, notare che nessun flag 'g' in sostituzione).
  3. Una volta che la prima occorrenza è stata sostituita, basta leggere il contenuto del file rimanente e stampare.
    • “n” è un comando sed che stampa lo spazio del pattern e lo sovrascrive con la riga successiva.
    • Usato "loop" come etichetta. "n" stampa la riga corrente e sovrascrive lo spazio del modello con la riga successiva. b loop salta di nuovo al :loop. Quindi questo ciclo stampa il contenuto rimanente di thegeekstuff.txt.

Sed Esempio 2. Rimuovere i dati tra il pattern ” ” in un intero file

Nel nostro file di esempio ci sono tre righe tra “”.

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. Il comando sopra keep aggiunge tutte le righe di un file finché non si verifica la fine del file.
    • $! – Se non è una fine del file.
    • N – Aggiungi la riga successiva con lo spazio del modello delimitato da \n
    • /\n$/!b loop – Se questa non è l'ultima riga del file, salta di nuovo al loop.
  2. Ora tutte le linee saranno disponibili nello spazio pattern delimitato da newline. Sostituisci tutte le occorrenze di dati tra ” con il vuoto.

Sed Esempio 3. Rimuovere i tag HTML di un file

Diciamo che ho un file con il seguente contenuto 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>

Il seguente comando sed rimuove tutti i tag html dal file specificato

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

1.
Line 1 Column 2
  1. Ogni volta che trova una riga contenente "<", rimuovi prima tutti i tag HTML di quella riga.
  2. Se ora lo spazio del modello contiene '<', ciò implica un tag multilinea. Ora ripeti il ​​seguente ciclo:
    • Unisciti alla riga successiva
    • Rimuovi tutti i tag HTML finché non esiste un singolo "<"
  3. Quando non esiste alcun '<' nello spazio del modello, lo stampiamo e iniziamo un nuovo ciclo.

II. Esempi di Sed per ramo condizionale

Sed Esempio 4. Se una riga termina con una barra rovesciata, aggiungi la riga successiva.

Il nostro file di esempio ha due righe che terminano con una barra rovesciata, ora dobbiamo aggiungere la riga successiva.

$ 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. Controlla se la riga termina con la barra rovesciata (/\\$/), se sì, leggi e aggiungi la riga successiva allo spazio del modello e sostituisci \ alla fine della riga e il numero di spazi seguito da quello, con il singolo spazio.
  2. Se la sostituzione ha esito positivo, ripetere il passaggio precedente. Il ramo verrà eseguito solo se la sostituzione ha esito positivo.
  3. Ramo condizionale usato principalmente per pattern ricorsivi.

Sed Esempio 5. Comunica una stringa numerica.

 sed '
 :loop
 s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/
 t loop'
12342342342343434
12,342,342,342,343,434
  1. Raggruppa le cifre in due gruppi.
  2. Il primo gruppo è costituito da tutte le cifre fino alle ultime tre cifre. Le ultime tre cifre vengono acquisite nel 2° gruppo.
  3. Quindi i due gruppi corrispondenti vengono separati da una virgola. Quindi le stesse regole vengono applicate alla linea ancora e ancora fino a quando tutti i numeri non sono stati raggruppati in gruppi di tre.
  4. Ad esempio, nella prima iterazione sarà 12342342342343,434
  5. Nell'iterazione successiva 12342342342,343,434 e continua finché non ci sono meno di tre cifre.

Sed Esempio 6. Formattazione:Sostituisci ogni spazio iniziale di una riga 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. Separa tutti gli spazi iniziali e gli altri caratteri di una riga con un carattere di nuova riga.
  2. Ora sostituisci spazio e newline con newline e +. Quindi da destra a sinistra lo spazio sarà sostituito da + e la nuova riga verrà spostata a sinistra per un carattere.
  3. Finalmente all'inizio della riga ci sarà \n, quindi rimuovi quella nuova riga.

Linux
  1. Tutorial sul comando cd di Linux per principianti (8 esempi)

  2. Tutorial comando Linux comm per principianti (5 esempi)

  3. Linux df Command Tutorial per principianti (8 esempi)

  4. Tutorial sul comando della data di Linux per principianti (8 esempi)

  5. Linux du Command Tutorial per principianti (10 esempi)

Linux w Command Tutorial per principianti (5 esempi)

Tutorial sui comandi Linux ss per principianti (8 esempi)

Tutorial Regex per esempi di Linux (Sed e AWK).

Tutorial Unix Sed:esempi di sostituzione Sed avanzati

Tutorial Unix Sed:7 esempi di operazioni Sed Hold e Pattern Buffer

Tutorial Unix Sed:operazione su file multilinea con 6 esempi pratici