Ero sivun ”Sed” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
kaikkilla sed-lausekkeilla tulee olla -e vipu
Ei muokkausyhteenvetoa |
p (kaikkilla sed-lausekkeilla tulee olla -e vipu) |
||
(16 välissä olevaa versiota 10 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
Stream Editor on [[tiedosto|tiedostojen]] ja [[syötevirta|syötevirtojen]] yksinkertaiseen automaattiseen muokkaamiseen tarkoitettu ohjelma ja tavallaan myös kieli. Kuten useimmista muistakin peruskomentorivityökaluista, tästäkin on useita toteutuksia. | Sed eli Stream Editor on [[tiedosto|tiedostojen]] ja [[syötevirta|syötevirtojen]] yksinkertaiseen automaattiseen muokkaamiseen tarkoitettu ohjelma ja tavallaan myös kieli. Kuten useimmista muistakin peruskomentorivityökaluista, tästäkin on useita toteutuksia. | ||
==Käyttö== | ==Käyttö== | ||
Tyypillisin | Tyypillisin käyttötapa on [[komentotulkki|komentotulkin]] [[komentorivin perusteet|putkitusominaisuutta]] käytettävä muoto | ||
<tulostava komentolauseke> | sed -e "<sed-lauseke>" | <tulostava komentolauseke> | sed -e "<sed-lauseke>" | ||
Sed kykenee muokkaamaan myös tiedostoja | |||
sed -i <muokattava-tiedosto> | sed -i <muokattava-tiedosto> | ||
=== | |||
===Sedin ohjaaminen=== | |||
Sed vastaanottaa muokkaustemplaatin joko tiedostona | |||
sed -f <skriptitiedosto> | sed -f <skriptitiedosto> | ||
tai | tai komentoriviargumenttina | ||
sed -e <sed-lauseke> | sed '<sed-lauseke>' | ||
===sed- | Lausekkeita voi suoritusnopeutta ajatellen ketjuttaa ohjelman useamman käynnistämisen välttämiseksi | ||
sed -e '<sed-lauseke>' -e '<sed-lauseke>' | |||
===Sed-lausekkeet=== | |||
Sed-lausekkeet ovat yksinkertaisimmillaan muotoa | |||
[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]]. | |||
Käsiteltäessä vaikkapa hakemistopolkuja voidaan välimerkki valita toisin | |||
s#/root/tmp#/tmp#g | |||
==Katso== | =====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===== | |||
<osoite> c\ | |||
<korvaava rivi> | |||
Korvaa rivit joihin ''<osoite>'' sopii rivillä '<korvaava rivi>'. Esimerkki: | |||
$ sed '/peruna/ c\ | |||
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== | |||
*[[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]] |