Sed: Porovnání verzí
Smazaný obsah Přidaný obsah
Řádek 50:
=== Sed a proměnné ===
Sed jako takový s proměnnými nepracuje, ale používá zásobník tzv. ''buffer''.
<pre>
user@stroj:~/$ echo '(word 3336 556 3469 613 "790")' |sed '
s_\((word\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9]*\) \("[^"]*")\)_<\1><maxx>\2</maxx><minx>\4</minx><maxy>\3</maxy><miny>\5</miny><text>\6</text></\1>_g
# Ještě ořežu zbytky závorek
s_<(_<_g
s_</(_</_g
s_)<_<_g
# Následuje výsledek zpracování:'
<word><maxx>3336</maxx><minx>3469</minx><maxy>556</maxy><miny>613</miny><text>"790")</text></word>
</pre>
;Poznámka k příkladu : Někomu se může zdát uvedený příklad poněkud těžkopádný (mě teda osobně ano) a určitě jdou ty zbylé závorky ošetřit elegantnějším regulárním výrazem již při selektu - bohužel ještě nejsem natolik kovaný v této oblasti abych věděl jak.
=== Jak pracovat se zásobníkem ===
''Přiznám se, že práce se zásobníkem je pro mě dosud velice ztuha pochopitelná, pokusím se však přiblížit jeho fungování nejlépe jak budu umět.''
Jak už bylo zmíněno, ''sed'' nepracuje s vlastním řádkem, ale s ''prostorem pro vzorky'', ve kterém řádky zpracovává a teprve po jejich zpracování je vypouští ven. Je-li však toto výchozí chování potlačeno volbou "-n", tak se na výpisu zobrazí obsah ''prostoru pro vzorky'' jedině je-li odeslán příkazem '''p'''.
{| border="1" cellpadding="1" cellspacing="0" style="font-size: 75%; border: gray solid 1px; border-collapse: collapse; width: 100%"
|- style="background: #ececec;"
! Příkaz
! Příklad použití
! Popis
|-
| style="text-align:center" | '''p'''
|<pre><nowiki>
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
p;s/Zpracovávaný/Upravený/'
Zpracovávaný řádek
Upravený řádek
</nowiki></pre>
| Příkaz vypisuje obsah ''prostoru pro vzorky''. V uvedeném příkladu byl příkazem '''p''' na standardní výstup vypsán obsah ''prostoru pro vzorky'' před jeho zpracováním.
|-
| style="text-align:center" | '''h'''
|<pre><nowiki>
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
h;s/Zpracovávaný/Upravený/;g'
Zpracovávaný řádek
</nowiki></pre>
| příkaz odstraní původní obsah ''zásobníku'' a přesune místo něj do zásobníku obsah z ''prostoru pro vzorky''. Pro lepší demonstraci byl v příkladu použit také příkaz '''g''', ten nahradil upravený obsah ''prostoru pro vzorky'' obsahem ''zásobníku'', který, jak vidno, příkaz '''h''' přesunul do ''zásobníku'' ještě před jeho úpravou.
|-
| style="text-align:center" | '''H'''
|<pre><nowiki>
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
H;s/Zpr/Upr/;H;s/acov/av/;H;s/áva/e/;H;g'
Zpracovávaný řádek
Upracovávaný řádek
Upravávaný řádek
Upravený řádek
</nowiki></pre>
| příkaz přidá k původnímu obsahu ''zásobníku'' obsah z ''prostoru pro vzorky''. Aby bylo lépe patrné jak je postupně obsah ''prostoru pro vzorky'' zpracováván, je průběžně přidáván příkazem '''H''' k obsahu ''zásobníku'' a na závěr vypsán příkazem '''g'''. První řádek nemá žádný obsah, protože ''zásobník'' byl původně prázdný.
|-
| style="text-align:center" | '''g'''
|<pre><nowiki>
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
g'
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
p;s/Zpracovávaný/Upravený/;g'
Zpracovávaný řádek
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
p;s/Zpracovávaný/Upravený/;h;g'
Zpracovávaný řádek
Upravený řádek
</nowiki></pre>
| Příkaz vypíše obsah ''zásobníku'' a pak ho z něj odstraní. Jak funguje už sice docela objasnují příklady uvedené u předchozích příkladů, ale aby to bylo dostatečně zřejmé přidal jsem ještě další dva. V prvním příkaz '''g''' vypíše prázdný řádek, protože ''zásobník'' je zatím prázdný. Ve druhém příkladu příkaz '''p''' vypsal obsah ''prostoru pro vzorky'' aby bylo patrné že ten prázdný není. Teprve ve třetím příkladu je upravený obsah ''prostoru pro vzorky'' vložen příkazem ''h'' do ''zásobníku'', odkud může být příkazem '''g''' vypsán.
|-
| style="text-align:center" | '''G'''
|<pre><nowiki>
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
G'
Zpracovávaný řádek
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
p;s/Zpracovávaný/Upravený/;G'
Zpracovávaný řádek
Upravený řádek
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
p;s/Zpracovávaný/Upravený/;h;G'
Zpracovávaný řádek
Upravený řádek
Upravený řádek
</nowiki></pre>
| Příkaz připojí obsah ''prostoru pro vzorky'' k obsahu ''zásobníku'', ten pak vypíše.
|-
| style="text-align:center" | '''x'''
|<pre><nowiki>
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
x'
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
p;s/Zpracovávaný/Upravený/;x'
Zpracovávaný řádek
user@stroj:~/$ echo 'Zpracovávaný řádek' |sed '
p;s/Zpracovávaný/Upravený/;h;x'
Zpracovávaný řádek
Upravený řádek
</nowiki></pre>
| Příkaz prohodí obsah ''zásobníku'', s obsahem ''prostoru pro vzorky''.
|-
|}
<pre>
|