sed

Kohteesta Wikipedia
Siirry navigaatioon Siirry hakuun
Tämä artikkeli käsittelee suodatinta. SED voi tarkoittaa myös Saksan sosialistista yhtenäisyyspuoluetta.

Alun perin Unixille tehty sed (lyhenne sanoista stream editor) on tehokas ohjelmoitava vuonsuodatin tekstivirran manipulointiin.

Perl-ohjelmointikieli on saanut huomattavia vaikutteita sed:stä.

Normaalisti sed:n komento on muotoa:

[osoite1,[osoite2]] komento 

jossa osoite1 tai osoite2 (tai kumpikin) voidaan antaa tekstivirran rivin numeerisen arvon sijasta myös niin sanottuna säännöllisenä lausekkeena.

Usein käytetyt komennot[muokkaa | muokkaa wikitekstiä]

Kommennot on testattu: GNU sed version 4.1.5

s/säännöllinenlauseke/korvike/liput[muokkaa | muokkaa wikitekstiä]

Esimerkki, tulostaa 'boaboaboa':

echo aaa | sed -e 's/a/boa/g'

Esimerkki, tulostaa 'baaa':

echo aaaa | sed -e 's/a/b/1'

Esimerkki, tulostaa 'abaa':

echo aaaa | sed -e 's/a/b/2'

q[muokkaa | muokkaa wikitekstiä]

Poistuu sed:stä prosessoimatta enää komentoja.

Esimerkki, tulostaa:
aaa
bbb

( echo aaa; echo bbb; echo aaa; echo bbb; ) | sed -e '/b/ q'

p[muokkaa | muokkaa wikitekstiä]

Tulostaa "patternspace":n. Normaalisti sed tulostaa kaikki rivit, joten jotta tällä komennolla olisi mitään käyttöä, täytyy parametrinä käyttää valitsinta -n, jolloin sed ei enää oletusarvoisesti tulostakaan mitään, ellei toisin pyydetä:

Esimerkki, tulostaa: aaa

( echo bbb; echo ccc; echo aaa; echo ddd; ) | sed -n -e '/a/ p'

d[muokkaa | muokkaa wikitekstiä]

Tuhoaa rivin.

Esimerkki, tulostaa:
aaa
aaa

( echo aaa; echo bbb; echo aaa; ) | sed -e '/b/ d'

i\[muokkaa | muokkaa wikitekstiä]

Lisää rivin yläpuolelle toisen rivin.

Esimerkki, tulostaa:
Wikipedia
rulaa

echo rulaa | sed -e '/laa/ i\Wikipedia'

a\[muokkaa | muokkaa wikitekstiä]

Lisää rivin alapuolelle toisen rivin.

Esimerkki, tulostaa:
Wikipedia
Wikimedia
Mediawiki
Wikispecies

( echo Wikipedia; echo Mediawiki; ) | sed -e '/pedia/ a\Wikimedia' -e '/wiki/ a\Wikispecies'

c\[muokkaa | muokkaa wikitekstiä]

Korvaa rivin.

Esimerkki, tulostaa:
Mediawiki!

echo 'Wikimedia!' | sed -e '/media/ c\Mediawiki!'

y[muokkaa | muokkaa wikitekstiä]

Toimii samalla tavalla kuin Unix:n tr eli muuntaa merkkejä.

Esimerkki, tulostaa:
AAA BBB

echo 'aaa bbb' | sed -e 'y/ab/AB/'

N[muokkaa | muokkaa wikitekstiä]

Komennon toimintaa voi olla aluksi hieman vaikeaa hahmottaa eikä sen käyttö yksinään olekaan kovin tehokasta. Se yhdistää kaksi riviä toisiinsa sisällyttäen rivinvaihtomerkin niiden väliin.

Esimerkki, tulostaa
Wikimedia Mediawiki!

( echo 'Wikimedia'; echo ' Mediawiki'; ) | sed -e 'N;s/\n//'

D[muokkaa | muokkaa wikitekstiä]

Tuhotaan "pattern space":n alusta rivinvaihtomerkkiin asti oleva kohta.

Esimerkki, tulostaa:
Wikipedia rulettaa

( echo 'Mediawiki!'; echo 'Wikipedia rulettaa' ) | sed -e 'N;D'

P[muokkaa | muokkaa wikitekstiä]

Tulostetaan "pattern space":n alusta rivinvaihtomerkkiin asti oleva kohta.

Esimerkki, tulostaa:
Mediawiki!

( echo 'Mediawiki!'; echo 'Wikipedia rulettaa' ) | sed -n -e 'N;P'

Monimutkaisempia esimerkkejä[muokkaa | muokkaa wikitekstiä]

Yhdistetään tiedoston tekstii.txt rivit yhdeksi riviksi eli ts. poistetaan rivinvaihtomerkit, tulostus oletustulostusvirtaan:

sed -e ':joo;N;s/\n//;t joo' < tekstii.txt

Muutetaan tiedostossa "/etc/default/keyboard olevan "XKBLAYOUT"-muuttujanimen jälkeinen maatunnus maatunnukseksi "fi".

L='fi' && sudo sed -i 's/XKBLAYOUT=\"\w*"/XKBLAYOUT=\"'$L'\"/g' /etc/default/keyboard

Katso myös[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]