Ero sivun ”Sed” versioiden välillä

Siirry navigaatioon Siirry hakuun
3 847 merkkiä lisätty ,  5. huhtikuuta 2020
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 käyttökohde on [[bash|bash-skripteissä]] putkia käytettävä muoto
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 kykenee muokkaamaan myös tiedostoja
  sed -i <muokattava-tiedosto>
  sed -i <muokattava-tiedosto>
===sedin ohjaaminen===
 
sed vastaanottaa muokkaustemplaatin joko tiedostona
===Sedin ohjaaminen===
Sed vastaanottaa muokkaustemplaatin joko tiedostona
  sed -f <skriptitiedosto>
  sed -f <skriptitiedosto>
tai komentoriviargummenttina
tai komentoriviargumenttina
  sed -e <sed-lauseke>
  sed '<sed-lauseke>'
===sed-lausekkeet===
Lausekkeita voi suoritusnopeutta ajatellen ketjuttaa ohjelman useamman käynnistämisen välttämiseksi
tyypillisin sed-lauseke lienee epäilemättä  
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ä
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]].


===esimerkkejä===
Käsiteltäessä vaikkapa hakemistopolkuja voidaan välimerkki valita toisin
  echo ababaabcd | sed -e s/\(ab\)*//
  s#/root/tmp#/tmp#g
tulostaa "aabcd". Vastaavasti g:n kanssa
echo ababaabcd | sed -e s/\(ab\)*//g
tulostaa "acd", tässä * on kuitenkin turha, koska g vastaa saman merkkijonon mielivaltaisen monta kertaa.


==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]]
42

muokkausta

Navigointivalikko