Tämä artikkeli käsittelee suodatinta. SED voi tarkoittaa myös Saksan sosialistista yhtenäisyyspuoluetta.

sed (lyhenne sanoista stream editor) on Unixille kehitetty ohjelmoitava ei-interaktiivinen tekstieditori tekstivirran käsittelyyn.[1] Ohjelman on kehittänyt Lee E. McMahon Bell Labsissa vuonna 1973 tai 1974.[1][2] Ohjelman GNU-versio on saatavilla useille muillekin alustoille.[1]

Ohjelma sai vaikutteita Ken Thompsonin kehittämistä ed ja grep -ohjelmista.[3][2]

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

Komennot

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.

sed on sanottu olevan Turing-täydellinen.[4]

Usein käytetyt komennot

Kommennot on testattu: GNU sed version 4.1.5

s/säännöllinenlauseke/korvike/liput

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

Poistuu sed:stä prosessoimatta enää komentoja.

Esimerkki, tulostaa:
aaa
bbb

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

p

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

Tuhoaa rivin.

Esimerkki, tulostaa:
aaa
aaa

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

y

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

Esimerkki, tulostaa:
AAA BBB

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

N

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

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

Esimerkki, tulostaa:
Wikipedia rulettaa

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

P

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

Esimerkki, tulostaa:
Mediawiki!

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

Monimutkaisempia esimerkkejä

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

Lähteet

  1. a b c 2.1. What is sed? sed.sourceforge.net. Arkistoitu 27.6.2018. Viitattu 6.9.2019. (englanniksi)
  2. a b CHAPTER 9 columbia.edu. Viitattu 6.9.2019. (englanniksi)
  3. Brian Kernighan Remembers the Origins of ‘grep’ 22.7.2018. The Newstack. Viitattu 7.8.2018.
  4. A proof that Unix utility sed is Turing complete catonmat.net. Viitattu 6.1.2022. (englanniksi)

Aiheesta muualla