GNU/Linux >> Znalost Linux >  >> Linux

Unix Sed výukový program:6 příkladů operace větvení Sed

Tento článek je součástí probíhající série Unix Sed Tips and Tricks.

Jako každý jiný programovací jazyk, sed také poskytuje speciální větvené příkazy pro řízení toku programu.

V tomto článku se podíváme na následující dva typy větvení Sed.

  1. Sed Unconditional Branch
  2. Podmíněná větev Sed

Sed nepodmíněná syntaxe větve:

$ sed ':label command(s) b label'
  • :label – specifikace štítku.
  • příkazy – jakýkoli příkaz(y) sed
  • štítek – libovolný název štítku
  • štítek b – skočí na štítek bez kontroly jakýchkoli podmínek. Není-li popisek zadán, přeskočí se na konec skriptu.

Sed podmíněná syntaxe větve:

$ sed ':label command(s) t label'
  • :label – specifikace štítku.
  • příkazy – jakýkoli příkaz(y) sed
  • štítek – libovolný název štítku
  • štítek – skočí na popisek pouze v případě, že poslední náhradní příkaz upravil prostor vzoru. Není-li popisek zadán, přeskočí se na konec skriptu.

Vytvořte vzorový testovací soubor

Nejprve vytvořte soubor geekstuff.txt, který bude použit v příkladech uvedených níže.

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

I. Sed Příklady pro nepodmíněnou větev

Příklad Sed 1. Nahraďte první výskyt vzoru v celém souboru

V souboru thegeekstuff.txt nahraďte první výskyt „Administration“ na „Supervision“.

$ 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. Ve výše uvedeném příkazu sed pouze čte řádek po řádku a tiskne prostor se vzorem, dokud neproběhne správa.
  2. Jakmile dojde k administraci, nahraďte administraci supervizí (pouze jeden výskyt, nezapomeňte, že při substituci není příznak „g“).
  3. Jakmile bude nahrazen první výskyt, stačí si přečíst zbývající obsah souboru a vytisknout.
    • „n“ je příkaz sed, který vytiskne prostor se vzorem a přepíše jej dalším řádkem.
    • Použil „loop“ jako štítek. „n“ vytiskne aktuální řádek a přepíše prostor se vzorem dalším řádkem. b smyčka skočí znovu na :loop. Tato smyčka tedy vytiskne zbývající obsah souboru thegeekstuff.txt.

Sed Příklad 2. Odstraňte data mezi vzorem ” ” v celém souboru

V našem vzorovém souboru jsou tři řádky mezi „“.

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. Výše uvedený příkaz keep připojí všechny řádky souboru, dokud nenastane konec souboru.
    • $! – Pokud to není konec souboru.
    • N – Připojte další řádek s mezerou ve vzoru oddělenou \n
    • /\n$/!b smyčka – Pokud toto není poslední řádek souboru, přejděte znovu na smyčku.
  2. Nyní budou všechny řádky dostupné ve vzorovém prostoru odděleném novým řádkem. Nahraďte veškerý výskyt dat mezi ” prázdným.

Příklad Sed 3. Odstraňte HTML značky souboru

Řekněme, že mám soubor s následujícím obsahem 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>

Následující příkaz sed odstraní všechny html tagy z daného souboru

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

1.
Line 1 Column 2
  1. Pokaždé, když najdete řádek obsahující znak „<“, nejprve odstraňte všechny značky HTML tohoto řádku.
  2. Pokud nyní prostor se vzorem obsahuje znak „<“, znamená to víceřádkovou značku. Nyní opakujte následující smyčku:
    • Připojte se k dalšímu řádku
    • Odstraňte všechny značky HTML, dokud nebude existovat žádný znak „<“
  3. Když v prostoru vzoru neexistuje žádné „<“, vytiskneme jej a spustíme nový cyklus.

II. Sed Příklady pro podmíněnou větev

Sed Příklad 4. Pokud řádek končí zpětným lomítkem, připojte k němu další řádek.

Náš ukázkový soubor má dva řádky zakončené zpětným lomítkem, nyní k němu musíme připojit jeho další řádek.

$ 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. Zkontrolujte, zda řádek končí zpětným lomítkem (/\\$/), pokud ano, přečtěte si a připojte další řádek do mezery se vzorem a nahraďte znak \ na konci řádku a počet mezer za ním, s jedinou mezerou.
  2. Pokud je náhrada úspěšná, opakujte výše uvedený krok. Větev bude provedena pouze v případě úspěšného nahrazení.
  3. Podmíněné větvení většinou používané pro rekurzivní vzory.

Příklad Sed 5. Opravte číselné řetězce.

 sed '
 :loop
 s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/
 t loop'
12342342342343434
12,342,342,342,343,434
  1. Seskupte číslice do dvou skupin.
  2. První skupina obsahuje všechny číslice až po poslední tři číslice. Poslední tři číslice se zachytí ve 2. skupině.
  3. Pak se dvě odpovídající skupiny oddělí čárkou. Poté se na řadu znovu a znovu použijí stejná pravidla, dokud nebudou všechna čísla seskupena do skupin po třech.
  4. Například v první iteraci to bude 12342342342343,434
  5. V další iteraci 12342342342,343,434 a pokračuje, dokud nebudou mít méně než tři číslice.

Sed Příklad 6. Formátování :Nahraďte každou úvodní mezeru řádku znakem „+“

$ 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. Všechny úvodní mezery a další znaky řádku oddělte znakem nového řádku.
  2. Nyní nahraďte mezeru a nový řádek novými řádky a +. Mezera zprava doleva bude nahrazena znakem + a nový řádek bude o jeden znak posunut doleva.
  3. Konečně tam bude \n začátek řádku, takže tento nový řádek odstraňte.

Linux
  1. Linux cd command tutorial pro začátečníky (8 příkladů)

  2. Výuka příkazů Linux pro začátečníky (5 příkladů)

  3. Linux Date Command Tutorial pro začátečníky (8 příkladů)

  1. Linux df Command Tutorial pro začátečníky (8 příkladů)

  2. Linux du Command Tutorial pro začátečníky (10 příkladů)

  3. Výukový program Linux echo Command pro začátečníky (5 příkladů)

  1. Linux env Command Tutorial pro začátečníky (5 příkladů)

  2. Návod k příkazu velikosti Linuxu pro začátečníky (6 příkladů)

  3. Linux kill Command Tutorial pro začátečníky (5 příkladů)