*Tämä artikkeli käsittelee suodatinta. SED voi tarkoittaa myös Saksan sosialistista yhtenäisyyspuoluetta.*
**sed** (lyhenne sanoista ***s**tream **ed**itor*) on Unixille kehitetty ohjelmoitava ei-interaktiivinen tekstieditori tekstivirran käsittelyyn. Ohjelman on kehittänyt Lee E. McMahon Bell Labsissa vuonna 1973 tai 1974. Ohjelman GNU-versio on saatavilla useille muillekin alustoille.

Ohjelma sai vaikutteita Ken Thompsonin kehittämistä ed ja grep -ohjelmista.

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.

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'

```

### i\

Lisää rivin yläpuolelle toisen rivin. 

Esimerkki, tulostaa:  

Wikipedia  

rulaa  

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

```

### a\

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\

Korvaa rivin. 

Esimerkki, tulostaa:  

Mediawiki!  

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

```

### 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
----------

* tr

Lähteet
-------

1. 1 2 3  2.1. What is sed? *sed.sourceforge.net*.  Arkistoitu 27.6.2018. Viitattu 6.9.2019. (englanniksi)
2. 1 2  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
----------------

* GNU sed manual