Zaklady riadkoveho editora ed

Na vstupe sa davaju prikazy, ktore sa skladaju z adresy (ktore riadky sa maju editovat) a prikazu (co sa ma zmenit). Adresa moze byt vynechana, vtedy sa operacia prevedie s aktualnym riadkom, tj.j. s riadkom s ktorym sa previedla posledna operacia. Pri niektorych prikazoch (ako delete) sa uvadza dvojica adries oddelenych ciarkov urcujuca odkial pokial sa dany prikaz aplikuje.
(Niektore) adresy
n Riadok cislo n.
+n Riadok o n riadkov za aktualnym.
-n Riadok o n riadkov pred aktualnym.
$ Posledny riadok.
/regexp/ Najblizsi nasledujuci riadok obsahujuci retazec matchujuci regularny vyraz regexp.



(Niektore) prikazy
Pred kazdym z tychto prikazov moze byt adresa urcujuca v ktorom riadku sa prikaz vykona. Ak tam nie je adresa, tak sa uvazuje aktualny riadok. Prikazy 'p' a 'd' pracuju aj s dvojicou adries oddelenych ciarkou, vtedy sa vypisu (resp. zmazu) vsetky riadky medzi oboma adresami. Napr. prikaz "2,5p" vypise druhy, treti, stvrty a piaty riadok suboru.

a Add. Zacni vkladat text za riadok. Vkladanie sa ukonci bodkou na samostatnom riadku.
i Insert. Zacni vkladat text pred riadok. Vkladanie sa ukonci bodkou na samostatnom riadku.
d Delete. Zmaz riadok (riadky s dvojicou adries).
s/regexp/text/ Substitute. Nahrad regularny vyraz textom.
p Print. Zobraz riadok (riadky s dvojicou adries).
w Write. Zapis subor.
q Quit. Ukoncenie prace s editorom.






Neinteraktivny (stream) editor (prikaz sed)

sed -e command
sed -e command subor
Prikaz sed je neinteraktivny editor textovych suborov, alebo standardneho vstupu. Dokaze automaticky vykonat jednoduche modifikacie textoveho suboru popisane ako command a vysledny text vypise na standardny vystup. Syntax parametra command je v zasade zhodna s prikazmi editora ed. Command je zlozeny z dvoch casti: adresa a prikaz.

Adresa urcuje na ktoru cast suboru sa prikaz aplikuje, napriklad:
  cely subor
n len riadok cislo n
/regexp/ vsetky riadky obsahujuce retazec matchujucimi regularny vyraz regexp. Regularny vyraz ma tu istu syntax ako v pripade prikazu grep.
addr1,addr2 vsetky riadky medzi adresami addr1 a addr2.


Prikaz urcuje aka operacia sa ma vykonat nad castou textu urcenom adresou, napriklad:
d zmazat
r subor vlozit obsah suboru
s/regexp/text/g nahradit vsetky podretazce matchujuce regularny vyraz regexp retazcom text. Regularny vyraz ma tu istu syntax ako v pripade prikazu grep. Text moze obsahovat znak &, ktory sa nahradi celym povodnym textom matchujucim regexp a escapy \1 az \9, ktore sa nahradia n-tym matchujucim regularnym podvyrazom. Za podvyraz sa povazuje regularny vyraz uzatvoreny v \(...\) zatvorkach.


Priklady.

Prikaz:
sed -e s/\\bstaremeno\\b/novemeno/g main.c > novymain.c
nahradi v subore main.c vsetky vyskyty slova staremeno slovom novemeno a vysledny text zapise do suboru novymain.c.

Prikaz:
ls -al | sed -e 2,4s/\\./\$\$\$/g
vypise pracovny adresar, ale v druhom, tretom a stvrtok riadku bude znak '.' nahradeny retazcom $$$.

Prikaz:
ls -al | sed -e 's/\(.*\)\..*/\1/g'
vypise pracovny adresar, ale subory budu bez koncoviek.

Prikaz:
grep "^From:" mbox | sed -e 's/.*<\(.*\)>.*/\1/g'
prehlada subor mbox (predpklada sa, ze tento subor je mailovy box v ktorom su ulozene emaily) a vypise email adresy vsetkych odosielatelov.






Zaklady "visualneho" editora vi

Editor vi pracuje v troch rezimoch:

1.) Vizualny rezim

sipky alebo h,j,k,l Posuvanie sa v texte
i (insert) Prechod do rezimu vkladania textu, pred dany znak
a (insert) Prechod do rezimu vkladania textu, za dany znak
oo Prechod do rezimu vkladania textu, za dany riadok
x Zmaz znak
dd Zmaz riadok
: Prechod do prikazove rezimu

2.) Prikazovy rezim (editor ed)

w (write) Zapis suboru
q (quit) Ukoncenie editacie
q! (quit) Ukoncenie editacie aj bez ulozenia zmien.
h (help) Pomoc
vi (visual) Prechod do visualneho rezimu

3.) Rezim vkladania textu

AaBb ... Znaky sa vkladaju do editovaneho textu
Control [ Prechod do visualneho rezimu




Cvicenia

1.) Skopirujte nasledovny subor main.c do svojho domovskeho adresara a editorom vi v nom zmente meno funkcie 'fun' na 'fcia' a to v mieste definicie aj na vsetkych vyvolaniach.

2.) Editorom ed otvorte subor main.c a zmente v nom navratovu hodnotu funkcie main z 0 na 1.

3.) Napiste prikazovy riadok, ktory za pomoci editora ed vymaze druhy riadok suboru main.c

4.) Napiste prikaz ktory vypise vystup prikazu 'ls -al' prefiltrovany tak, ze nahradi viacnasobny vyskyt znaku medzera iba jedinou medzerou. Napriklad namiesto:

-rw-r--r--    1 vittek   vittek       1641 Oct 22 17:24 c2.txt
vypise:
-rw-r--r-- 1 vittek vittek 1641 Oct 22 17:24 c2.txt


5.) Napiste prikaz, ktory prefiltruje vystup prikazu ls tak, ze namiesto suborov vypise iba ich koncovky. Napriklad, namiesto suboru c2.txt vypise iba txt.