Ja osobne vi a sed povazuju za zcela nenahraditelne utility a neumim si zivot bez nich predstavit..Myslim si, ze vi je takovy dobry komprovmis mezi poctem funkci editoru a jeho delkou..na jedne strane jsou editory wordstaroveho typu joe nebo wpe(borlandi IDE for unix), ktere jsou priserne hloupe a na druhe strane emacs, to je ale zase obludne velke-18MB. A prez moji snahu do neho proniknout se mi to jeste nepodarilo. Presto ze neobsahuji programovaci jazyk uz jsem v nich videl veci jako hledani nejkratsi cesty v bludisti, reseni hanojskych vezi atd..
Zacnu editorem sed. Protoze je to podle me uplne nejnepostradatelnejsi
editor z teto trojice. Neni to totiz normalni editor ale je to davkovy,
neinteraktivny, radkovy editor. (to vypada odporne :) Neslouzi tedy k
bezne editaci ale k davkovemu zpracovani fajlu. Je to tedy velmi
jednoducha a sikovna utilita, ktera muze fungovat jako hodne
standardnich utilitek-grep, replace ,unix2dos, dos2unix a fura dalsich.
Na jeho zaklade pracuje fura davek na ruzne prekousavani textu. Neni to
programovaci jazyk ale presto jsem uz v nem videl hodne.
Nakonec v prikladech ukazu jak se dela par zakladnich programku..
Pro vsechny radky:
Volani
sed [-n] -f soubor_z_programem [seznam_souboru]
Sed potom pomoci programu kopiruje a upravuje radky se seznamu souboru
a vypisuje je na obrazovku. Kdyz neuvedete souboru vstup je z stdin.
sed [-n] program [seznam_souboru]Prepinace
Prikaz
Prikaz se sklada z:
[adresa[,adresa]] instrukce [argumenty]
Adresy nemusite uvadet-sed potom provede instrukci na kazdou radku.
sed pracuje takto:
Adresy
Adresu muze byt:
sed /^#/d <soubory>co jsme napsali? to mezi // je regular expresion-tedy adresa, ktera neco vyhledava. ^ znamena novy radek a # je #. Tedy /^#/ je splneno na kazdem radku, ktery zacina na #. Potom se provede instrukce d, ktera radek smaze Po provedeni teto instrukce se uz dalsi neprovadi a pokracuje se dalsim radkem.
A tento program supluje /dev/null :)
sed d
[adresa] a\ text \ text \ ... text
unix2dos
ktera prevadi z unixackeho na dosacky format textovych souboru
sed "$ !s/$/^M/ $ s/$/^Z/ "(pozor znak ^M a ^Z musite zadat opravdu jako znak ^M - V editoru vi se to dela pomoci ^V^M) Prvni radka se bude provaded na vsech radkach mimo posledni-pridavani ^M na konec posledni radky je spatne. V regular expresion znak $ znamena konec radky. Program tedy vyhleda vsechno konce radky a prida k nim znak ^M-prikaz substituce je jediny, kterym lze neco pridavat do radky. Druhy radek zpusobi, ze na posledni radce vstupu se prida jeste ^Z
sed "s/^M$// $ /^Z$//"Tento program vypere vsechny ^M na koncich radek a zrusi je. Potom na konci souboru najde ^Z a take jej zrusi.
Tim ale moznosti sedu nekonci. Takhle muzete udelat univerzalni filtr, ktery vam to jednou prevede do unixu a pak zase zpet do dosu:
sed " /*napred se postarame o dosacke radky..ty se daji snadno poznat /^M$/ {s/^M$// /*pokud radka konci na ^M zrus ho*/ p /*vypis na obrazovku aktualni stav-dosackou radku prevedenou na unix*/ d /*ukonci provadeni teto radky(smaz ji) } /^Z$/ {s/^Z$// /*pokud radka konci na ^Z-posledni radka dos. fajlu zrus ^Z na konci*/ p /*vypis ji a prerus jeji zpracovani*/ d } /*ted uz mema jistotu ze tu je unixova radka*/ $ {s/$/^Z/ /*kdyz je posledni pridej ^Z*/ p /*vypis a prerus provadeni*/ d } s/$/^M/ /*a zbyla nam normalni unix radka...tak k ni pridame ^M*/ "No neni to sranda? Lepsi nez assembler!
Filtr na skolicky
Ve skolickach mam casto znaky < > a &, Pri prevadeni do html ale delaji
zmatky Je treba je nahradit:
> -> &gt
< -> &lt
& -> &amp
To zaruci nasledujici script:
sed "
s/&/\&amp/g
s/</\&lt/g
s/>/\&gt/g
"
Ten je naprosto jednoduchy...typicky priklad pouziti subsituce:
/&/ vyhleda znak $
/\&amp/ to nahradi retezcem &amp...\& je tam misto & proto, ze &
je take ridici a delal by tam nesmysly. \ jeho ucinek zastavi
whoami
Treba takto jde udelat prikaz whoami z prikazu who:
# who am i | sed 's/ .*//' root
tail +11 lze prepsat: sed '1,10d' (smaze radky 1-10)
Tento soubor je soucasti rozsahle sbirky skolicek na http://www.ucw.cz/~hubicka/skolicky
Take si muzete prohlidnout jeji puvodni textovou podobu
Nebo mi mailnout na hubicka@ucw.cz
Copyright (C) Jan Hubicka 1996