Muokataan sivua Sed

Siirry navigaatioon Siirry hakuun
Varoitus: Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos kirjaudut sisään tai luot tunnuksen, muokkauksesi yhdistetään käyttäjänimeesi ja saat paremman käyttökokemuksen.

Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.

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=====
<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ä===
===Esimerkkejä===
  echo ababaabcd | sed -e 's/\(ab\)*//'
  echo ababaabcd | sed -e 's/\(ab\)*//'
tulostaa "abaabcd". Vastaavasti g:n kanssa
tulostaa "abaabcd". Vastaavasti g:n kanssa
Wikin materiaali on kaikkien vapaasti käytettävissä Creative Commons 3.0 - nimi mainittava -lisenssin alaisuudessa. TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!

Muokataksesi tätä sivua vastaa alla olevaan kysymykseen (lisätietoja):

Peruuta Muokkausohjeet (avautuu uuteen ikkunaan)
Noudettu kohteesta ”https://www.linux.fi/wiki/Sed