+ All Categories
Home > Education > Unx Sed editor

Unx Sed editor

Date post: 07-Aug-2015
Category:
Upload: miroslav-hruz
View: 899 times
Download: 3 times
Share this document with a friend
13
Proudový editor SED Proudový editor SED 5.4.2006 Miroslav Hrúz, [email protected]
Transcript
Page 1: Unx Sed editor

Proudový editor SEDProudový editor SED

5.4.2006

Miroslav Hrúz, [email protected]

Page 2: Unx Sed editor

ÚvodÚvod● V první řadě je to “normální” textový filtr jako

● grep nebo awk

● V kostce: Po řádkách bere vstupní soubor, s některými provádí operace a pak je tiskne na výstup.

● Vychází z řádkového editoru ed

● Používá REGEX se starší notací, nejen díky tomu se může syntax jevit na první pohled jako naprostá změť 's/\[a\]*/\[a\]\{1\}/'

Page 3: Unx Sed editor

SED REGEX (shrnutí)SED REGEX (shrnutí)●^ za átek ádkyč ř● $ konec ádkyř● . jakýkoliv znak

● (char)* opakování znaku (0-n)x

● (char)? opakování znaku (0-1)x

● [abc] znak a OR b OR c

● [^abc] jakýkoliv znak krom (a OR b OR c)! dopln k ne negace!!ě ě● (char)\{m,n\} char minimáln m, maximáln n-krátě ě● (char)\{m,\} char alespo m-krátň● (char)\{,n\} char nejvýše n-krát

● (char)\{k\} char p esn k-krátř ě● \(re\) seskupení

● \n zp tná reference, n-tá skupina ?? otázka do davuě● re1 \| re2 re1 OR re2 (funguje jen u GNU sed)

Page 4: Unx Sed editor

Syntax (základní)Syntax (základní)● sed [-ne] 'ktereRadky prikaz' vstup {>vystup}

● KtereRadky určíme číslem nebo RE● Prikaz

● p vypíše řádkek na standartní výstup● n řádek se vypíše na výstup a je zpracováván další● d smaže řádek● w ukončí zpracování akt. řádku a zapíše jej do

souboru● s substituce (nejčastější použití sedu)

● s/co/čím/{příznaky}● -n potlačení výstupu, vypsány jen ty s p

Page 5: Unx Sed editor

Syntax (substituce)Syntax (substituce)● sed '/ktereRadky/ s/co/cim/{priznaky}' vstupniSoubor

● Priznaky● n přepíše n-tý výskyt co● g přepíše všechny výskyty co● p jestli zamění, vypíše co na STDOUT● w file jestli zamění, vypíše co do file

● Další syntax bude vysvětlena na příkladech

Page 6: Unx Sed editor

SED v příkladech ISED v příkladech I● sed '23 d' fileA

● # Vypíše vše kromě 23.řádku v fileA● sed -n '1-5 p' fileB

● # Vypíše řádky 1-5 z fileB● sed -n '/root/ p' /etc/passwd

● # Vypíše řádku superuživatele● sed -n 's/kocka/pes/gp' fileC

● # Vypíše jen ty řádky kde se vyskytuje “kocka” a nahradí je “pes” , bez příznaku g (global) nahradí jen první výskyt na řádce, s příznakem g všechny!

Page 7: Unx Sed editor

SED v příkladech IISED v příkladech II● sed -e 's/kocka/pes/g' -e 's/pes/slon/g' fileC

● # (-e = vykoná výraz), tam, kde je “kocka” nahradí “pes” a při druhém průchodu nahradí “pes” slovem “slon”

● sed -e '[email protected]@acme.net@g' fileD

● # oddělovače jsou rozpoznávány dynamicky● cat fileE && sed -e '/^radka.*jedna/s/radka/RADKA/' -e '/radka/d'

fileEradka 1 (jedna)

radka 2 (dva)

radka 3 (tri)

***

RADKA 1 (jedna)

Page 8: Unx Sed editor

SED v prikladech III (hotova reseni)SED v prikladech III (hotova reseni)● sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

● Vypíše řádky od konce: abcd -> dcba● echo 12345678 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1 \2/;ta'

● # Za každými 3 čísly vytiskne mezeru, tedy: 12 345 678● sed -n '/regexp/{g;1!p;};h'

● # Vypíše řádku před tou, která obsahuje regexp● sed 's/\[/\\\[/g'

● # Před každou závorku [ přidá \, takže [ -> \[

Page 9: Unx Sed editor

Skripty v jazyku SEDSkripty v jazyku SED

● Pro složitější operace můžeme použít zápis do skriptu, do hlavičky musíme umístit

● #! /usr/bin/sed -f● Doporučuje se přípona .sed, závazné to není, spíše jen pro

přehlednost

Page 10: Unx Sed editor

Task (za 1 bod?)Task (za 1 bod?)● Vypište si rekurzivně všechny soubory (ls) ve svém

domovském adresáři (a ve všech podadresářích), u těch které mají přístupová práva 644 (rw-r—r--) a datum modifikace v roce 2005 změnte pomocí textového filtru sed uživatele/skupinu na root/root, velikosti souborů, popř. čísla inod vypisujte po třech.

● Zakázany: grep, awk!● Nápověda: (~hruzm1/napoveda)

● echo 12345678 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1 \2/;ta'#12 345 678

Page 11: Unx Sed editor

SolvedSolved

● např.

ls -lia * | sed -ne '/-rw-r--r--/p' |

sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1 \2/;ta' |

sed -ne '/.*2 005/s/..user../root/'

-e '/.*2 005/s/..group../root/'

-e 's/2 005/2005/p'

Page 12: Unx Sed editor

LiteraturaLiteratura● http://sed.sourceforge.net/sed1line_cz.html

● http://www-128.ibm.com/developerworks/linux/library/l-sed1.html

● http://www-128.ibm.com/developerworks/linux/library/l-sed2.html

● http://www-128.ibm.com/developerworks/linux/library/l-sed3.html

● http://www.oracle.com/technology/pub/articles/dulaney_sed.html

● http://www.suwald.com/linux-gnu/sed-howto.html

● http://pegasus.rutgers.edu/~elflord/unix/sed.html

● USENET (e.g. google groups): comp.unix.shell

Page 13: Unx Sed editor

The (Happy) End??The (Happy) End??

● A žili šťastně až do smrti..


Recommended