Sed: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Kkulla (talk | contribs)
Kkulla (talk | contribs)
No edit summary
Line 4: Line 4:


=Mis on sed?=
=Mis on sed?=
'''Sed''' on voo redaktor (''stream editor''), mitte-interaktiivne redaktor, mis on loodud Lee E. McMahoni poolt 1973. või 1974. aastal. Lühiajaloo sedist leiab Unixi tööriistade ajaloost [http://www.columbia.edu/~rh120/ch106.x09].  
'''Sed''' on voo redaktor (''stream editor''), mitte-interaktiivne redaktor, mis on loodud Lee E. McMahoni poolt 1973. või 1974. aastal. Lühiajaloo sedist leiab Unixi tööriistade ajaloost [http://www.columbia.edu/~rh120/ch106.x09].  
Voo kirjeldamine käib toru (''pipe'') kaudu.
Voo kirjeldamine käib toru (''pipe'') kaudu.
Line 12: Line 13:


=Spetsiaalne tähemärk=
=Spetsiaalne tähemärk=
Sedist on kergem aru saada neil, kes oskavad kasutada käsku '''grep''', sest sedi tavaväljendid on praktiliselt samad, mis käsu grep puhulgi, kuid ühe erisusega: kaldkriips "'''/'''" on sedis spetsiaalne tähemärk. Seega saab sediga teha sama, mis grepigagi, millega ei saa kasutada käsku "otsi ja asenda".  
Sedist on kergem aru saada neil, kes oskavad kasutada käsku '''grep''', sest sedi tavaväljendid on praktiliselt samad, mis käsu grep puhulgi, kuid ühe erisusega: kaldkriips "'''/'''" on sedis spetsiaalne tähemärk. Seega saab sediga teha sama, mis grepigagi, millega ei saa kasutada käsku "otsi ja asenda".  


Line 18: Line 20:


=Kuidas sed töötab?=
=Kuidas sed töötab?=
Sed loeb standardsisendist ühe rea kaupa. Sed on rea põhine: sed opereerib tekstis ridadega. Iga rea kohta käivitab sed seeria redigeerimise toiminguid, seejärel see rida kirjutatakse STDOUT’i.  (STDOUT – sisendfailid kirjutatakse standardväljundisse redigeerimise käsuga, mida on täpsustatud rakendatava skriptiga. Kui täpsustus on '''–n''' suvandiga, siis valitakse skripti poolt ainult need sisendread ja kirjutatakse standardväljundisse.)
Sed loeb standardsisendist ühe rea kaupa. Sed on rea põhine: sed opereerib tekstis ridadega. Iga rea kohta käivitab sed seeria redigeerimise toiminguid, seejärel see rida kirjutatakse STDOUT’i.  (STDOUT – sisendfailid kirjutatakse standardväljundisse redigeerimise käsuga, mida on täpsustatud rakendatava skriptiga. Kui täpsustus on '''–n''' suvandiga, siis valitakse skripti poolt ainult need sisendread ja kirjutatakse standardväljundisse.)


Line 24: Line 27:


==Ridade printimine==
==Ridade printimine==
Näide:
Näide:
Minu näite näidisfaili (naidis.txt) tekst on järgmine:
Minu näite näidisfaili (naidis.txt) tekst on järgmine:


Line 30: Line 35:


Kuvame näiteks tekstifaili naidis.txt esimesed 4 rida
Kuvame näiteks tekstifaili naidis.txt esimesed 4 rida
<pre>bash~$ sed '4q' naidis.txt</pre>
<pre>bash~$ sed '4q' naidis.txt</pre>


Line 39: Line 45:


==Mitu käsku samaaegselt==
==Mitu käsku samaaegselt==
Kui tegemist on samaaegselt mitme käsuga, siis tuleb iga käsu ette kirjutama '''-e'''.  
Kui tegemist on samaaegselt mitme käsuga, siis tuleb iga käsu ette kirjutama '''-e'''.  
<pre>bash~$ cat naidis.txt | sed -e '4q' -e '2q'</pre>
<pre>bash~$ cat naidis.txt | sed -e '4q' -e '2q'</pre>
[[File:mitu_kasku.png]]
[[File:mitu_kasku.png]]


==Otsitava sõnega rea printimine==
==Otsitava sõnega rea printimine==
Kui me tahame, et sed leiaks üles kõik read, kus on vigane tekst, siis kasutame käsku '''p''' (print), et saavutada oma tulemuse:
Kui me tahame, et sed leiaks üles kõik read, kus on vigane tekst, siis kasutame käsku '''p''' (print), et saavutada oma tulemuse:
<pre>~$ sed '/veasid/p' naidis.txt</pre>
<pre>~$ sed '/veasid/p' naidis.txt</pre>
[[File:veasid.png]]
[[File:veasid.png]]
Antud käsu tulemusel prinditakse välja kogu faili sisu ja need read, kus antud sõne esineb, kaks korda. Ilmselgelt ei soovinud me sellist tulemust. Kui tahta, et prinditakse ekraanile ainult need read, mis vastaksid meie soovile, tuleb kasutada suvandit '''–n''':  
Antud käsu tulemusel prinditakse välja kogu faili sisu ja need read, kus antud sõne esineb, kaks korda. Ilmselgelt ei soovinud me sellist tulemust. Kui tahta, et prinditakse ekraanile ainult need read, mis vastaksid meie soovile, tuleb kasutada suvandit '''–n''':  
<pre>~$ sed -n '/veasid/p' naidis.txt</pre>
<pre>~$ sed -n '/veasid/p' naidis.txt</pre>
[[File:nveasid.png]]
[[File:nveasid.png]]


==Ridade valik==
==Ridade valik==
Järgmine käsk:  
Järgmine käsk:  
<pre>sed –n '/tegelikult/,/piinlik/p' naidis.txt</pre>
<pre>sed –n '/tegelikult/,/piinlik/p' naidis.txt</pre>
prindib esimese rea, mis sisaldab sõnet „tegelikult“, kuni ja kaasa arvatud reani, kus leidub sõne „piinlik“
prindib esimese rea, mis sisaldab sõnet „tegelikult“, kuni ja kaasa arvatud reani, kus leidub sõne „piinlik“
[[File:k.a_reani.png]]
[[File:k.a_reani.png]]


==Asendamine==
==Asendamine==
Sed’il on rida käskusid, kuid üks peamisi on asendamise käsk '''s''' (ingl. k. ''substitute''). Asendamise käsk annab kõikidele tavalistele avaldistele uue väärtuse. Asendamine toimub järgmise skeemi kohaselt:
Sed’il on rida käskusid, kuid üks peamisi on asendamise käsk '''s''' (ingl. k. ''substitute''). Asendamise käsk annab kõikidele tavalistele avaldistele uue väärtuse. Asendamine toimub järgmise skeemi kohaselt:


Line 75: Line 95:


Nt parandan (asendan) naidis.txt failis ära sõne „veasid“ sõneks „vigu“ ja loon uue faili.  
Nt parandan (asendan) naidis.txt failis ära sõne „veasid“ sõneks „vigu“ ja loon uue faili.  
<pre>sed 's/veasid/vigu/' <naidis.txt >uusnaidis.txt </pre>
<pre>sed 's/veasid/vigu/' <naidis.txt >uusnaidis.txt </pre>


või ka
või ka
<pre>sed 's/veasid/vigu/' naidis.txt >uusnaidis.txt</pre>
<pre>sed 's/veasid/vigu/' naidis.txt >uusnaidis.txt</pre>
[[File:asendus1.png]]
[[File:asendus1.png]]
Antud juhul see tulemus ei rahulda, sest 5. real on ainult esimesena ilmnenud vigane sõne ära parandatud, kuid üks „veasid“ on veel jätkuvalt alles. Selleks, et sed kontrolliks tervet rida ja ei jääks esimese leitud sõne juures pidama, kasuta võtit '''g'''.  
Antud juhul see tulemus ei rahulda, sest 5. real on ainult esimesena ilmnenud vigane sõne ära parandatud, kuid üks „veasid“ on veel jätkuvalt alles. Selleks, et sed kontrolliks tervet rida ja ei jääks esimese leitud sõne juures pidama, kasuta võtit '''g'''.  
<pre>sed 's/veasid/vigu/g' <naidis.txt >uusnaidis.txt</pre>
<pre>sed 's/veasid/vigu/g' <naidis.txt >uusnaidis.txt</pre>
[[File:veasid1.png]]
[[File:veasid1.png]]
Samas, kui tahta muuta reas nt ainult teisena esinevat sama sõna, siis kasuta järgmist käsku:
Samas, kui tahta muuta reas nt ainult teisena esinevat sama sõna, siis kasuta järgmist käsku:
<pre>sed 's/veasid/vigu/2' naidis.txt</pre>
<pre>sed 's/veasid/vigu/2' naidis.txt</pre>
[[File:vigu2.png]]
[[File:vigu2.png]]


==Faili loomine, kus on muudetud (asendatud sõnedega) sisuga read==
==Faili loomine, kus on muudetud (asendatud sõnedega) sisuga read==
<pre>sed –n 's/veasid/vigu/p' naidis.txt >uuuus.txt</pre>  
<pre>sed –n 's/veasid/vigu/p' naidis.txt >uuuus.txt</pre>  
analoogne tulemuse saab:  
analoogne tulemuse saab:  
<pre>sed 's/veasid/vigu/w uuuus.txt' naidis.txt</pre>
<pre>sed 's/veasid/vigu/w uuuus.txt' naidis.txt</pre>
[[File:muudetud_sisu.png]]
[[File:muudetud_sisu.png]]
Nagu selgus, jäi teise ritta veel üks vigane sõne, seega õige oleks olnud_
Nagu selgus, jäi teise ritta veel üks vigane sõne, seega õige oleks olnud_
<pre>sed –n 's/veasid/vigu/pg' naidis.txt >uuuus.txt</pre>
<pre>sed –n 's/veasid/vigu/pg' naidis.txt >uuuus.txt</pre>
[[File:muudetud_sisu1.png]]
[[File:muudetud_sisu1.png]]
Analoogse tulemuse annab käsk  
Analoogse tulemuse annab käsk  
<pre>sed 's/veasid/vigu/gw uuuus.txt' naidis.txt</pre>
<pre>sed 's/veasid/vigu/gw uuuus.txt' naidis.txt</pre>


==Adresseerimine==
==Lisamine==
 
Adresseerimise mõte on näidata, millistele ridadele käske rakendada. Kui sa ei näita aadressi, siis rakendatakse käske igale reale.
Adresseerimise mõte on näidata, millistele ridadele käske rakendada. Kui sa ei näita aadressi, siis rakendatakse käske igale reale.


===Rea algusesse lisamine===
===Lisamine rea algusesse===
 
Et sisestada mingi sõne iga rea algusesse failis  
Et sisestada mingi sõne iga rea algusesse failis  
<pre>sed 's/^/> /' naidis.txt</pre>
<pre>sed 's/^/> /' naidis.txt</pre>
[[File:rea_algusesse.png]]
[[File:rea_algusesse.png]]


===Rea lõppu lisamine===
===Lisamine rea lõppu===
 
Iga rea lõppu mingi sõne sisestamine
Iga rea lõppu mingi sõne sisestamine
<pre>sed 's/$/ OK /' naidis.txt</pre>
<pre>sed 's/$/ OK /' naidis.txt</pre>
[[File:rea_loppu.png]]
[[File:rea_loppu.png]]


==Mitu asendust korraga==
==Mitu asendust korraga==
Mitme üheaegselt antud käsud tuleb eraldada individuaalse '''–e''' suvandiga.
Mitme üheaegselt antud käsud tuleb eraldada individuaalse '''–e''' suvandiga.
[[File:mitu_kasku1.png]]
[[File:mitu_kasku1.png]]


Line 118: Line 164:


Kustutamine toimub käsuga '''d''' (ingl. k. ''delete'').
Kustutamine toimub käsuga '''d''' (ingl. k. ''delete'').
<pre>sed 'algus_sõne,lõpp_sõned' naidis.txt</pre>
<pre>sed 'algus_sõne,lõpp_sõned' naidis.txt</pre>


===Konkreetsete ridade kustutamine===
===Konkreetsete ridade kustutamine===
Konkreetsete ridade kustutamiseks alates konkreetsest reast kuni lõpuni (teisalt, sama käsku saab kasutada ka printimiseks faili algusest kuni konkreetse reani).
Konkreetsete ridade kustutamiseks alates konkreetsest reast kuni lõpuni (teisalt, sama käsku saab kasutada ka printimiseks faili algusest kuni konkreetse reani).
<pre>Sed '3,$d' naidis.txt</pre>
<pre>Sed '3,$d' naidis.txt</pre>
[[File:kustutamine.png]]
[[File:kustutamine.png]]
Selle käsu tulemusena prinditakse kaks esimest rida sellest näitefailist.
Selle käsu tulemusena prinditakse kaks esimest rida sellest näitefailist.


Line 130: Line 181:
[[File:kustutamine1.png]]
[[File:kustutamine1.png]]


Sama tulemuse saame, kui kirjutame:  
Sama tulemuse saame, kui kirjutame:
<pre>sed '/veasid/d' naidis.txt</pre>
<pre>sed '/veasid/d' naidis.txt</pre>
d käsu tulemusel kuvatakse tekst, kust on eemaldatud need read, kus otsitav sõne esines.
d käsu tulemusel kuvatakse tekst, kust on eemaldatud need read, kus otsitav sõne esines.


Line 137: Line 190:


Nüüd käsk, kus alustades etteantud sõnega ja lõpetades teise etteantud sõnega.
Nüüd käsk, kus alustades etteantud sõnega ja lõpetades teise etteantud sõnega.
[[File:sonest_soneni.png]]
[[File:sonest_soneni.png]]


===Kõikide ridade kustutamine, v.a ühe rea===
===Kõikide ridade kustutamine, v.a ühe rea===
Soovides kustutada kõik read peale viienda  
Soovides kustutada kõik read peale viienda  
<pre>sed '5!d' naidis.txt</pre>
<pre>sed '5!d' naidis.txt</pre>


Line 146: Line 202:


===Ridade vahemiku kustutamine===
===Ridade vahemiku kustutamine===
Kustutame näiteks teisest kuni kahekümnenda reani. Kui ridu nii palju pole, kustutatakse nii palju kui saab.  
Kustutame näiteks teisest kuni kahekümnenda reani. Kui ridu nii palju pole, kustutatakse nii palju kui saab.  
<pre>sed ’2,20d’ naidis.txt</pre>
<pre>sed ’2,20d’ naidis.txt</pre>
[[File:reast_reani.png]]
[[File:reast_reani.png]]


===Kustutamine esimesest reast kuni konkreetse reani===
===Kustutamine esimesest reast kuni konkreetse reani===
Soovides kustutada alates esimesest reast kuni konkreetset sõnet sisaldava reani:  
Soovides kustutada alates esimesest reast kuni konkreetset sõnet sisaldava reani:  
<pre>sed '1,/korrektselt/d' naidis.txt</pre>
<pre>sed '1,/korrektselt/d' naidis.txt</pre>


Line 157: Line 218:


===Viimase rea kustutamine===
===Viimase rea kustutamine===
Soovides kustutada viimast rida  
Soovides kustutada viimast rida  
<pre>sed ’$d’ naidis.txt</pre>
<pre>sed ’$d’ naidis.txt</pre>
[[File:viimane_rida.png]]
[[File:viimane_rida.png]]


Line 164: Line 228:


Eeltoodud näidete puhul kustutati terve rida, kuid teinekord on vaja kustutada vaid sõne selles reas, jättes ülejäänud teksti alles. Selleks tarbeks kasuta käsku kujul:
Eeltoodud näidete puhul kustutati terve rida, kuid teinekord on vaja kustutada vaid sõne selles reas, jättes ülejäänud teksti alles. Selleks tarbeks kasuta käsku kujul:
<pre>sed 's/veasid//g' naidis.txt</pre>  
<pre>sed 's/veasid//g' naidis.txt</pre>  
[[File:tyhik.png]]
[[File:tyhik.png]]


==Muutmine==
==Muutmine==
===Käsureal jooksvalt faili muutmine===
===Käsureal jooksvalt faili muutmine===
Selleks tuleb anda käsk  
Selleks tuleb anda käsk  
<pre>sed -i -e 'sedi käsud' failinimi</pre>
<pre>sed -i -e 'sedi käsud' failinimi</pre>
Näiteks asendame failis kõik sõnad esimene, teisega.
Näiteks asendame failis kõik sõnad esimene, teisega.
<pre>sed -i -e 's/esimene/teine/g' naidis.txt</pre>
<pre>sed -i -e 's/esimene/teine/g' naidis.txt</pre>
[[File:jooksvalt_muutmine.png]]
[[File:jooksvalt_muutmine.png]]


===Teatud ridade muutmine===
===Teatud ridade muutmine===
Asendame failis sõne "on" sõnega "ei ole" igal real, kus see sõne sisaldub.
Asendame failis sõne "on" sõnega "ei ole" igal real, kus see sõne sisaldub.
<pre>sed '/see/s/on/ei ole/g' naidis.txt</pre>
<pre>sed '/see/s/on/ei ole/g' naidis.txt</pre>
[[File:teatud_rida.png]]
[[File:teatud_rida.png]]


==Lõpetamine==
==Lõpetamine==
Sedile on võimalik käsuga '''q''' (ingl. k. ''quit'') öelda, et ta teatud tingimusel lihtsalt lõpetaks ja ei täidaks eelnevalt antud käsku.  
Sedile on võimalik käsuga '''q''' (ingl. k. ''quit'') öelda, et ta teatud tingimusel lihtsalt lõpetaks ja ei täidaks eelnevalt antud käsku.  
<pre>sed '1 q'</pre>
<pre>sed '1 q'</pre>


Line 204: Line 280:


=Suvandite tabel=
=Suvandite tabel=
[[Suvand]]      Mõju
[[Suvand]]      Mõju


Line 215: Line 292:


=Sedi tavalised väljendid=
=Sedi tavalised väljendid=
[[^]] rea alguse tähis  
[[^]] rea alguse tähis  



Revision as of 20:54, 27 December 2010

Kaia AK 31, võtab selle, teema on pooleli

Mis on sed?

Sed on voo redaktor (stream editor), mitte-interaktiivne redaktor, mis on loodud Lee E. McMahoni poolt 1973. või 1974. aastal. Lühiajaloo sedist leiab Unixi tööriistade ajaloost [1]. Voo kirjeldamine käib toru (pipe) kaudu. See, mis eristab sedi teistest redaktoritest, nagu vi ja ed, on tema võime filtreerida teksti, mida ta saab sisendina torust. Sedi kutsutakse teinekord ka pakkredaktoriks (batch editor), sest teda ei ole vaja tema töötamise ajal redaktoriga mõjutada. See iseärasus võimaldab kasutada redigeerimise käskusid skriptis, mis on üpris leevendav korduvate redigeerimiste puhul. Kui on vaja teha asendusi väga suurtes tekstifailides, siis sed on selleks väga hea abiline. Sedi käsu süntaksil ei ole väljundfaili spetsifikatsiooni, kuid tulemused saab salvestada teise nimega faili, kasutades väljundi suunamist. Kui sisendiks on fail, siis sed ei riku originaali ära.

NB! Mitte kõik sed versioonid ei ole võrdsed: Linux kasutab GNU sedi, BSD kasutab oma sedi versiooni, mis on natukene erinev.

Spetsiaalne tähemärk

Sedist on kergem aru saada neil, kes oskavad kasutada käsku grep, sest sedi tavaväljendid on praktiliselt samad, mis käsu grep puhulgi, kuid ühe erisusega: kaldkriips "/" on sedis spetsiaalne tähemärk. Seega saab sediga teha sama, mis grepigagi, millega ei saa kasutada käsku "otsi ja asenda".

Apostroofid

Sedi käsud tuleb kirjutada käsurealt antuna apostroofide (' ') vahele, et vältida shelli töökeskkonna paisumist (eriti BASH’is).

Kuidas sed töötab?

Sed loeb standardsisendist ühe rea kaupa. Sed on rea põhine: sed opereerib tekstis ridadega. Iga rea kohta käivitab sed seeria redigeerimise toiminguid, seejärel see rida kirjutatakse STDOUT’i. (STDOUT – sisendfailid kirjutatakse standardväljundisse redigeerimise käsuga, mida on täpsustatud rakendatava skriptiga. Kui täpsustus on –n suvandiga, siis valitakse skripti poolt ainult need sisendread ja kirjutatakse standardväljundisse.)

Sedi käivitamine

Sedi paremaks mõistmiseks kirjeldan seda näite kaudu, kasutades selleks ühte näidisteksti (naidis.txt).

Ridade printimine

Näide:

Minu näite näidisfaili (naidis.txt) tekst on järgmine:

Kuvame näiteks tekstifaili naidis.txt esimesed 4 rida

bash~$ sed '4q' naidis.txt

NB! Pea meeles, et sed prindib vaikimisi oma tulemused standardväljundisse, mis antud juhul on terminali aken. Sedi käivitamisel tuleb suunata andmed tema sisendisse, näidata, milliseid sedi käske rakendada ja kuhu väljund suunata. Kui sa tahad salvestada selle väljundi kuhugi faili, suuna see:

bash~$ cat naidis.txt | sed '4q' > 4.esimest.rida.txt

Mitu käsku samaaegselt

Kui tegemist on samaaegselt mitme käsuga, siis tuleb iga käsu ette kirjutama -e.

bash~$ cat naidis.txt | sed -e '4q' -e '2q'

Otsitava sõnega rea printimine

Kui me tahame, et sed leiaks üles kõik read, kus on vigane tekst, siis kasutame käsku p (print), et saavutada oma tulemuse:

~$ sed '/veasid/p' naidis.txt

Antud käsu tulemusel prinditakse välja kogu faili sisu ja need read, kus antud sõne esineb, kaks korda. Ilmselgelt ei soovinud me sellist tulemust. Kui tahta, et prinditakse ekraanile ainult need read, mis vastaksid meie soovile, tuleb kasutada suvandit –n:

~$ sed -n '/veasid/p' naidis.txt

Ridade valik

Järgmine käsk:

sed –n '/tegelikult/,/piinlik/p' naidis.txt

prindib esimese rea, mis sisaldab sõnet „tegelikult“, kuni ja kaasa arvatud reani, kus leidub sõne „piinlik“

Asendamine

Sed’il on rida käskusid, kuid üks peamisi on asendamise käsk s (ingl. k. substitute). Asendamise käsk annab kõikidele tavalistele avaldistele uue väärtuse. Asendamine toimub järgmise skeemi kohaselt:

sed 's/asendatav_sõne/asendaja_sõne/lipp' <vana_fail >uus_fail

Asendamise käsk koosneb seega neljast osast. s - asendamise käsk /../../ eraldaja asendatav (otsitav) sõne - sõne, mida failist ostitakse asendaja sõne - sõne, millega asendatakse asendatav (otsitav) sõne Otsitav sõne on vasakul pool ja asendaja sõne on paremal pool. Lipp – kontrollib tegevust ja võib olla g = kordab samal real N = ainult N-nda rea olemasolul p = väljundisse tuleb rida vaid siis, kui otsitav on leitud (vajab –n suvandit, et teisi ridasid mitte kaasata otsingusse) w ofile = lisab rea ofile’le ainult siis, kui otsitav on leitud

Nt parandan (asendan) naidis.txt failis ära sõne „veasid“ sõneks „vigu“ ja loon uue faili.

sed 's/veasid/vigu/' <naidis.txt >uusnaidis.txt 

või ka

sed 's/veasid/vigu/' naidis.txt >uusnaidis.txt

Antud juhul see tulemus ei rahulda, sest 5. real on ainult esimesena ilmnenud vigane sõne ära parandatud, kuid üks „veasid“ on veel jätkuvalt alles. Selleks, et sed kontrolliks tervet rida ja ei jääks esimese leitud sõne juures pidama, kasuta võtit g.

sed 's/veasid/vigu/g' <naidis.txt >uusnaidis.txt

Samas, kui tahta muuta reas nt ainult teisena esinevat sama sõna, siis kasuta järgmist käsku:

sed 's/veasid/vigu/2' naidis.txt

Faili loomine, kus on muudetud (asendatud sõnedega) sisuga read

sed –n 's/veasid/vigu/p' naidis.txt >uuuus.txt

analoogne tulemuse saab:

sed 's/veasid/vigu/w uuuus.txt' naidis.txt

Nagu selgus, jäi teise ritta veel üks vigane sõne, seega õige oleks olnud_

sed –n 's/veasid/vigu/pg' naidis.txt >uuuus.txt

Analoogse tulemuse annab käsk

sed 's/veasid/vigu/gw uuuus.txt' naidis.txt

Lisamine

Adresseerimise mõte on näidata, millistele ridadele käske rakendada. Kui sa ei näita aadressi, siis rakendatakse käske igale reale.

Lisamine rea algusesse

Et sisestada mingi sõne iga rea algusesse failis

sed 's/^/> /' naidis.txt

Lisamine rea lõppu

Iga rea lõppu mingi sõne sisestamine

sed 's/$/ OK /' naidis.txt

Mitu asendust korraga

Mitme üheaegselt antud käsud tuleb eraldada individuaalse –e suvandiga.

Kustutamine

Kustutamine toimub käsuga d (ingl. k. delete).

sed 'algus_sõne,lõpp_sõned' naidis.txt

Konkreetsete ridade kustutamine

Konkreetsete ridade kustutamiseks alates konkreetsest reast kuni lõpuni (teisalt, sama käsku saab kasutada ka printimiseks faili algusest kuni konkreetse reani).

Sed '3,$d' naidis.txt

Selle käsu tulemusena prinditakse kaks esimest rida sellest näitefailist.

Kustutame read, mis sisaldavad vigu. Selles näites on need read 4 kuni 5. Täpsustame vahemikku koos käsuga d.

Sama tulemuse saame, kui kirjutame:

sed '/veasid/d' naidis.txt

d käsu tulemusel kuvatakse tekst, kust on eemaldatud need read, kus otsitav sõne esines.

Kustutamine konkreetsest sõnest konkreetse sõneni

Nüüd käsk, kus alustades etteantud sõnega ja lõpetades teise etteantud sõnega.

Kõikide ridade kustutamine, v.a ühe rea

Soovides kustutada kõik read peale viienda

sed '5!d' naidis.txt

Ridade vahemiku kustutamine

Kustutame näiteks teisest kuni kahekümnenda reani. Kui ridu nii palju pole, kustutatakse nii palju kui saab.

sed ’2,20d’ naidis.txt

Kustutamine esimesest reast kuni konkreetse reani

Soovides kustutada alates esimesest reast kuni konkreetset sõnet sisaldava reani:

sed '1,/korrektselt/d' naidis.txt

Viimase rea kustutamine

Soovides kustutada viimast rida

sed ’$d’ naidis.txt

Kustutamisel tühikuga asendamine

Eeltoodud näidete puhul kustutati terve rida, kuid teinekord on vaja kustutada vaid sõne selles reas, jättes ülejäänud teksti alles. Selleks tarbeks kasuta käsku kujul:

sed 's/veasid//g' naidis.txt

Muutmine

Käsureal jooksvalt faili muutmine

Selleks tuleb anda käsk

sed -i -e 'sedi käsud' failinimi

Näiteks asendame failis kõik sõnad esimene, teisega.

sed -i -e 's/esimene/teine/g' naidis.txt

Teatud ridade muutmine

Asendame failis sõne "on" sõnega "ei ole" igal real, kus see sõne sisaldub.

sed '/see/s/on/ei ole/g' naidis.txt

Lõpetamine

Sedile on võimalik käsuga q (ingl. k. quit) öelda, et ta teatud tingimusel lihtsalt lõpetaks ja ei täidaks eelnevalt antud käsku.

sed '1 q'

Käskude tabel

Käsk Tulemus

a\ aktiivse rea alla teksti lisamine

c\ aktiivsel real teksti muutmine uue tekstiga

d teksti kustutamine

i\ Aktiivse rea ette teksti lisamine

p Teksti printimine

r Faili lugemine

s Teksti otsimine ja asendamine

w Faili kirjutamine

Suvandite tabel

Suvand Mõju

-e SCRIPT Käskude lisamine skripti käskude paketti sisendi töötlemise ajal töötamiseks

-f Käskude lisamine SCRIPT-FILE sisaldavatesse failide käskude paketti sisendi töötlemise ajal töötamiseks

-n Vaikne töörežiim

-V Versiooni informatsiooni printimine ja väljumine

Sedi tavalised väljendid

^ rea alguse tähis

$ rea lõpu tähis

[[.]] suvalise üksiku tähemärgi tähis

(tähemärk)* mitme meelevaldse tähemärgi olemasolu tähis

(tähemärk)? 0 või 1 (tähemärgi) astmega ühtimine

[[[abcdef]]] lubatud on kõik meelevaldsed tähemärgid, mis on kandiliste sulgude vahel [] (antud juhul a b c d e või f) tähemärkide ulatuses [a-z].

[[[^abcdef]]] tähistab misiganes tähemärki, mis ei ole kandiliste sulgude [] vahel (antud näites kõik märgid, v.a a b c d e või f)

[[(tähemärk)\{m,n\}]] tähistab tähemärgi m-n kordust

[[(tähemärk)\{m,\}]] tähistab märgi m või enama (tähemärkide) kordust

[[(tähemärk)\{,n\}]] tähistab n või vähema (tähemärgi) (võimalik 0) kordust

[[(tähemärk)\{n\}]] tähistab täpselt n (tähemärgi) kordust

\(sõne\) grupi operaator

\n tagasiviitamine – tähistab n-ndat gruppi

sõne2 tähistab sõnet 1 või sõnet 2. Töötab GNU sediga, kuid ei pruugi töötada teiste sedi vormidega.

Kasutatud materjal

Unix and Linux, Sed Tutorial, [2]

Sed - An Introduction and Tutorial, [3]

Linuxtopia,[4]

Zytrax Communications, [5]

Bash-Beginners-Guide, [6]

Doctor Bob's Lowfat Linux, [7]

sed FAQ, version 014, [8]