Nykyinen versio |
Oma tekstisi |
Rivi 6: |
Rivi 6: |
| Sed kykenee muokkaamaan myös tiedostoja | | Sed kykenee muokkaamaan myös tiedostoja |
| sed -i <muokattava-tiedosto> | | sed -i <muokattava-tiedosto> |
|
| |
| ===Sedin ohjaaminen=== | | ===Sedin ohjaaminen=== |
| Sed vastaanottaa muokkaustemplaatin joko tiedostona | | Sed vastaanottaa muokkaustemplaatin joko tiedostona |
| sed -f <skriptitiedosto> | | sed -f <skriptitiedosto> |
| tai komentoriviargumenttina | | tai komentoriviargumenttina |
| sed '<sed-lauseke>' | | sed -e <sed-lauseke> |
| Lausekkeita voi suoritusnopeutta ajatellen ketjuttaa ohjelman useamman käynnistämisen välttämiseksi
| |
| sed -e '<sed-lauseke>' -e '<sed-lauseke>'
| |
| | |
| ===Sed-lausekkeet=== | | ===Sed-lausekkeet=== |
| Sed-lausekkeet ovat yksinkertaisimmillaan muotoa
| | Tyypillisin sed-lauseke lienee epäilemättä |
| [osoite] <komento>[
| |
| teksti]
| |
| jossa [[#Osoitteet|osoite]] kertoo ne rivit johin [[#Komennot|komentoa]] sovelletaan. Osoitteen voi jättää poiskin jolloin komento toteutetaan kaikille riveille. Komennolle mahdollisesti annettava teksti kirjojitetaan komennon ja rivinvaihdon jälkeen.
| |
| | |
| Esimerkki:
| |
| $ sed '5 i\
| |
| uusi rivi' tiedosto
| |
| | |
| Esimerkissä '''5''' on osoite (rivinumero) '''i''' on komento (rivin lisäys ennen nykyistä riviä), jota seuraa komennon parametri (lisättävä rivi).
| |
| | |
| ====Osoitteet====
| |
| Osoitteita ovat mm.:
| |
| *''<numero>'' rivinumero; kometoa sovelletaan riviin numero ''numero''.
| |
| ::Esimerikiksi.:
| |
| $ sed '11 [[#c, rivin korvaus|c]]\
| |
| Yhdestoista rivi.' <tiedosto>
| |
| :: Korvaa 11. rivin tekstillä "Yhdestoista rivi."
| |
| *$ tiedoston loppu; komentoa sovelletaan viimeisen rivin jälkeen
| |
| ::Esimerikiksi.:
| |
| $ sed '$ [[#a.2C_rivin_lis.C3.A4ys_nykyisen_rivi_j.C3.A4lkeen|a]]\
| |
| Päivä pulkassa' <tiedosto>
| |
| :: Lisää tiedoston viimeisen rivin jälkeen rivn "Päivä pulkassa".
| |
| */''regex''/ komentoa sovelletaan kaikkiin riveihin, joihn [[säännöllinen lauseke]] sopii
| |
| ::Esimerikiksi.:
| |
| $ sed '/^#/ [[#d, rivin poisto|d]]' <tiedosto>
| |
| :: Poistaa kaikki rivit, jotka alkavat #-merkillä.
| |
| | |
| Kaksi osoitetta voi erottaa pilkulla, jolloin komentoa sovelletaan ensimmäiseen ja viimeiseen osoitteeseen mätsääviin riveihin ja kaikkiin niiden välisiin:
| |
| $ sed '/^Poistettava loppukirjoitus:\s*$/,$ [[#d, rivin poisto|d]]' <tiedosto>
| |
| :: Poistaa kaikki rivit rivistä "Poistettava loppukirjoitus:" alkaen tiedoston loppuun.
| |
| | |
| ====Komennot====
| |
| =====s, rivin muokkaaminen=====
| |
| Tyypillisin sed-komento lienee epäilemättä '''s''': | |
| s/<korvattava lauseke>/<korvaava lauseke>/g | | s/<korvattava lauseke>/<korvaava lauseke>/g |
| Sedissa s/// siis korvaa yksittäisia [[wikipedia:fi:merkkijono|osamerkkijonoja]] toisilla, g perässä kertoo, että kaikki vastaavuudet korvataan, eikä vain rivin ensimmäistä. Tätä samaa korvaussyntaksia käyttää mm. [[vim]]. | | Sedissa s/// siis korvaa yksittäisia [[wikipedia:fi:merkkijono|osamerkkijonoja]] toisilla, g perässä kertoo, että kaikki vastaavuudet korvataan, eikä vain rivin ensimmäistä. |
| | |
| Käsiteltäessä vaikkapa hakemistopolkuja voidaan välimerkki valita toisin
| |
| s#/root/tmp#/tmp#g
| |
| | |
| =====y, translitterointi=====
| |
| Korvaamisen lisäksi syötteelle voidaan tehdä [[tr]]-komentoa mukaileva käännös, joka muuntaa yksittäisiä merkkejä.
| |
| y/''<korvattavat merkit>''/''<korvaavat merkit>''/
| |
| ''Korvattava merkit'' korvataan vastaavalla ''korvaavalla merkillä.''
| |
| echo 'kaarteessa kahlaajat' | sed 'y/ae/io/'
| |
| Tulosteeksi tulisi "kiirtoossi kihliijit".
| |
| | |
| =====d, rivin poisto=====
| |
| <osoite> d
| |
| Poistaa rivit joihin osoite sopii. Esimerkki:
| |
| $ sed '3 d' <tiedosto>
| |
| Poistaa tiedoston kolmannen rivin.
| |
|
| |
|
| =====c, rivin korvaus===== | | ===Esimerkkejä=== |
| <osoite> c\
| | echo ababaabcd | sed -e s/\(ab\)*// |
| <korvaava rivi>
| | tulostaa "aabcd". Vastaavasti g:n kanssa |
| Korvaa rivit joihin ''<osoite>'' sopii rivillä '<korvaava rivi>'. Esimerkki:
| | echo ababaabcd | sed -e s/\(ab\)*//g |
| $ sed '/peruna/ c\
| | tulostaa "acd", tässä * on kuitenkin turha, koska g vastaa saman merkkijonon mielivaltaisen monta kertaa. |
| RIVI POISTETTU YLEISEN TURVALLISUUDEN NIMESSÄ' <tiedosto>
| |
| Korvaa rivit, jotka sisältävät tekstin "peruna" tekstillä "RIVI POISTETTU YLEISEN TURVALLISUUDEN NIMESSÄ".
| |
| | |
| =====i, rivin lisäys ennen nykyistä riviä=====
| |
| <osoite> i\
| |
| <uusi rivi>
| |
| Lisää rivin ''<uusi rivi>'' ennen niitä rivejä, joihin ''<osoite>'' sopii. Esimerkki:
| |
| $ sed '1 i\
| |
| Eka!' <tiedosto>
| |
| Lisää rivin "Eka!" tiedoston ensimmäiseksi riviksi.
| |
| | |
| =====a, rivin lisäys nykyisen rivi jälkeen=====
| |
| <osoite> a\
| |
| <uusi rivi>
| |
| Lisää rivin ''<uusi rivi>'' niiden rivien jälkeen joihin ''<osoite>'' sopii. Esimerkki:
| |
| $ sed '1 a\
| |
| Toinen rivi' <tiedosto>
| |
| Lisää rivin "Toinen rivi" tiedoston toiseksi riviksi.
| |
| | |
| ===Muita esimerkkejä===
| |
| echo ababaabcd | sed -e 's/\(ab\)*//' | |
| tulostaa "abaabcd". Vastaavasti g:n kanssa | |
| echo ababaabcd | sed -e 's/\(ab\)*//g' | |
| tulostaa "acd", tässä * on kuitenkin turha, koska g vastaa saman lausekkeen mielivaltaisen monta kertaa. | |
| sed -i 's/vanha/uusi/' *.py
| |
| vaihtaa sanan "vanha" sanaan "uusi" kaikissa kyseisen hakemiston py-tiedostoissa
| |
|
| |
|
| ==Katso myös== | | ==Katso myös== |
| *[[Säännöllinen lauseke]] | | *[[Säännöllinen lauseke]] |
|
| |
| ==Aiheesta muualla==
| |
| *[[wikipedia:fi:sed|Sed Wikipediassa]]
| |
| *[http://www.mit.jyu.fi/opiskelu/kurssit/unixshell01/sed.html Tapani Tarvaisen sed-opas]
| |
| *[http://www.funtoo.org/wiki/Sed_by_Example,_Part_1 Daniel Robbinsin selkeä opas englanniksi]
| |
| *[http://www.catonmat.net/blog/sed-one-liners-explained-part-one/ Sed one liners explained]
| |
|
| |
|
| [[Luokka:Komentorivin perustyökalut]] | | [[Luokka:Komentorivin perustyökalut]] |