sed(7)

NIMI
sed - tekstivirtamuokkain (the stream editor)

YLEISKATSAUS
sed [-n] [-e skripti ] [-f skriptitiedosto ] [ tiedosto ] ...

KUVAUS
Sed kopioi tiedoston (oletuksena vakiosyöte) vakiotulosteeseen muokaten sitä annettujen komentojen mukaisesti.

Valitsin -e ottaa yhden muokkauskomennon seuraavasta parametristä; useiden komentojen tapauksessa ne suoritetaan esiintymisjärjestyksessä. Valitsinta -e ei tarvita jos komentoja on vain yksi ja -f valitsinta ei käytetä.

Valitsin -f hakee komennot tiedostosta "skriptitiedosto"; useiden tiedostojen tapauksessa komennot suoritetaan esiintymisjärjestyksessä; valitsimet -e ja -f voivat esiintyä myös yhdessä.

Valitsin -n estää vakiotulosteen.

Skripti koostuu komennoista, jokainen omalla rivillään seuraavassa muodossa:
    [osoite [, osoite] ] funktio [parametrit] Yhden kierroksen aikana sed kopioi rivin syötteestä puskuriin, suorittaa skripteistä ne komennot, joiden osoite sopii puskuriin ja lopuksi kopioi puskurin vakiotulosteeseen ja tyhjentää puskurin.

Valitsin -n estää normaalin tulostuksen (niin, että ainoastaan p- ja w-komentojen tulostukset pääsevät läpi). n- ja N-komennot lukevat itse rivejä muualta ja d- ja D-komennot aiheuttavat skriptin muiden komentojen ohituksen. (D-komento lisäksi estää tyhjentämästä tämänhetkistä tekstipuskuria, joka normaalisti tapahtuisi ennen seuraavan kierroksen aloittamista).

On hyödyllistä tietää, että sed käyttää myös toista puskuria (sitä kutsutaan `pitopaikaksi', hold space englanniksi), joka voidaan kopioida tai liittää tämänhetkiseen tekstipuskuriin, myös puskurien vaihtaminen onnistuu.

Osoite voi olla desimaalinumero (jolloin se tarkoittaa rivinumeroa, jossa rivinumerointi alkaa yhdestä ja juoksee kumulatiivisesti tiedoston läpi), tai, `$' joka osoittaa syötteen viimeiseen riviin, tai `/säännöllinen lauseke/', jota haetaan, ed (1)-tyylisesti, mutta muokattuna näin:

(1) Merkkijono `\n' tarkoittaa rivinvaihtoa joka on löytyy puskurista ja `\t' tarkoittaa sarkainta.

(2) Komentorivi ilman osoitetta valitsee jokaisen puskurin.

(3) Komentorivi, jolla on yksi osoite, valitsee kaikki puskurit, jotka sopivat osoitteeseen.

(4) Komentorivi, jolla on kaksi osoitetta, valitsee alueen osoitteiden välistä. (Jos jälkimmäinen osoite on rivinumero ja on pienempi tai yhtäsuuri kuin ensimmäinen, vain yksi rivi valitaan.) Kun jälkimmäinen osoite on löytynyt, sed aloittaa uudelleen etsimään ensimmäistä osoitetta; näitä alueita voi olla useita.

Käänteisoperaattori '!' voi edeltää komentoa, jolloin osoitteet, joita ei valittu osoitteiden perusteella, ovat komennon kohteena.

Seuraavana lista funktioista, sallittujen osoitteiden määrän yläraja jokaiselle funktiolle on ilmoitettu sulkujen sisällä.

"teksti"-parametrit sisältävät yhden tai useamman rivillisen tekstiä. Jos viimeisenä merkkinä rivillä on kenoviiva, jatketaan teksti-parametrin lukemista seuraavalla rivillä, muulloin aletaan etsiä seuraavaa komentoa. Laita komennon perään ainoastaan yksi kenoviiva.

Tekstissä kenoviivoja käytetään suojelemaan seuraavaa merkkiä (sarkaimet ja rivinvaihtomerkit jne.), jotta komentotulkki ymmärtää oikein skripteistä löytyvät erikoismerkit.

Parametrien, joita merkitään "ltiedosto" (luku) tai "ktiedosto" (kirjoitus), täytyy olla viimeisinä komentorivillä. Jokainen kirjoitettava tiedosto luodaan ennen muokkauksen aloittamista. Enintään 10 kirjoitustiedostoa voidaan tehdä.

a "teksti"   (1)
    Lisää tekstin tulosteeseen ennen seuraavan rivin lukemista.

b "nimi"  (2)
    Hyppää komentoon `:', jolla on annettu nimi. Jos nimeä ei annettu, hypätään skriptin loppuun.

c "teksti"   (2)
    Vaihda. Poistaa tämänhetkisen tekstipuskurin. Tulostaa tekstin ja aloittaa seuraavan kierroksen.

d          (2)
    Poistaa tämänhetkisen tekstipuskurin. Hyppää seuraavalle kierrokselle.

D          (2)
    Poistaa ensimmäisen rivin tämänhetkisestä tekstipuskurista (kaikki merkit ensimmäiseen rivinvaihtomerkkiin asti) ja aloittaa seuraavan kierroksen.

g          (2)
    Korvaa tämänhetkisen tekstipuskurin sisältö pitopaikan sisällöllä.

G          (2)
    Lisää pitopaikan sisällön tämänhetkisen tekstipuskurin loppuun.

h          (2)
    Kopioi tämänhetkisen tekstipuskurin pitopaikkaan.

H          (2)
    Lisää tämänhetkisen tekstipuskurin pitopaikan loppuun.

i "teksti"   (1)
    Lisää teksti vakiotulosteeseen.

l          (2)
    Listaa valitun alueen vakiotulosteeseen. Valitsinta "w" voidaan käyttää samoin kuin s-komennossa, joka seuraa alempana. Tulostumattomat merkit tulostetaan näin:
       \b -- askelpalautin (ASCII 08)
       \t -- sarkain (ASCII 09)
       \n -- rivinvaihto (ASCII 10)
       \r -- return (ASCII 13)
       \e -- escape (ASCII 27)
       \xx -- ASCII-merkki jonka heksanumeerinen arvo on xx.

n          (2)
    Kopioi tämänhetkisen tekstipuskurin vakiotulosteeseen. Lukee seuraavan rivin syötteestä tilalle.

N          (2)
    Lisätään seuraava rivi vakiosyötteestä tämänhetkisen tekstipuskurin perään, väliin kuitenkin lisätään rivinvaihtomerkki. Tämänhetkinen rivinumero vaihtuu.

p          (2)
    Tulosta. Kopioi tämänhetkisen tekstipuskurin vakiotulosteeseen.

P          (2)
    Kopioi ensimmäisen rivin tämänhetkisestä tekstipuskurista (kaikki merkit ensimmäiseen rivinvaihtomerkkiin asti) vakiotulosteeseen.

q          (1)
    Lopeta. Hypätään skriptin loppuun, eikä aloiteta uutta kierrosta.

r "ltiedosto"  (1)
    Lukee ltiedoston sisällön ja laittaa sen tulostukseen ennen seuraavan syöterivin lukemista.

s/säännöllinen lauseke/korvaaja/liput         (2)
    Korvaa säännöllisen lausekkeen esiintymät korvaajalla tämänhetkisestä tekstipuskurista. Kaikia merkkejä, paitsi `/', voidaan käyttää. Katso ed (1) jos tarvitset tarkempaa kuvausta. Liput ovat seuraavat: g -- Yleinen. Korvaa kaikki esiintymät joka eivät ole päällekkäin pelkän yhden sijaan. p -- Tulosta saatu teksti kun korvaus on tehty. w -- Lisää tämänhetkinen tekstipuskuri tiedostoparametriin kuten w-komennossa,kun korvaus on tehty. Vakiotulostetta käytetään jos tiedostoparametrejä ei ole annettu.

t "nimi"  (2)
    Hyppää jos. Hypätään komentoon `:', jolla on annettu nimi, jos on tehty yksikin korvaus viimeisen syötteen lukemisen tai `t'- tai `T'-komentojen suorituksen jälkeen. Jos nimeä ei annettu, hypätään skriptin loppuun.

T "nimi"  (2)
    Hyppää virheen sattuessa. Hypätääm komentoon `:', jolla on annettu nimi, jos yksikin korvaus on epäonnistunut viimeisen syötteen lukemisen tai `t'- tai `T'-komentojen suorituksen jälkeen. Jos nimeä ei annettu, hypätään skriptin loppuun.

w "ktiedosto"  (2)
    Kirjoita. Lisää tämänhetkinen tekstipuskuri tiedostoon.

W "ktiedosto"  (2)
    Kirjoita ensimmäinen rivi. Lisää ensimmäinen rivi tämänhetkisestä tekstipuskurista tiedostoon.

x          (2)
    Vaihtaa keskenään tämänhetkisen tekstipuskurin ja pitopaikan sisällön.

y /teksti1/teksti2/      (2)
    Korvaa. Korvaa jokainen teksti1:sen esiintyminen teksti2:lla. Tekstien täytyy olla yhtä pitkiä.

! "komento"              (2)
    Kaikki paitsi. Asettaa funktion (tai ryhmittymän, jos funktio on `{') valitsemaksi alueeksi ainoastaan rivit, joita ei valittu osoitteiden perusteella.

: "nimi"  (0)
    Tämä komento ainoastaan asettaa nimen paikan hyppäyskomentojen käyttöön.

=          (1)
    Tulosta tämänhetkinen rivinumero vakiotulosteeseen omalle rivilleen.

{          (2)
    Suorittaa aaltosulkujen (`{' ja `}') välissä olevat komennot ainoastaan kun tämänhetkinen rivi kuuluu valittuun alueeseen.

Tyhjät komennot ohitetaan.

SIIRRETTÄVYYS
Tämä ohjelma on kehitetty BSD 4.1 UNIX sedistä, tutkimalla sen toimintaperiaatetta, ja on yhteensopiva sen kanssa (tekijöiden tietämyksen ja testauksien mukaan). Kaikki BSD 4.1 sedin dokumentoidut ominaisuudet ovat tuettuja.

Yksi dokumentoimatin ominaisuus (jos 'n' aloittaa ensimmäisen kommentin, aiheuttaa se saman vaikutuksen kuin valitsin -n komentorivillä) on jätetty toteuttamatta.

Seuraavat bugit ja rajoitukset ovat korjattu:

*   Piilotettua rajoitusta ktiedostonimien pituudessa ei ole. (BSD:ssä 40)

*   Rajoitusta nimen (ks. komento `:') pituudessa ei ole. (BSD sedissä 8)

*   Vaihtamiskomento toimii nyt pidemmilläkin tekstin pätkillä.

Seuraavat lisäykset vanhoihin komentoihin on tehty:

*   Komennot a ja i eivät vaadi tekstin alkuun kenoviiva-rivinvaihtoyhdistelmää. Tosin yhteensopivuussyistä se on suositeltavaa.

*   Komennot r ja w eivät vaadi väliä ennen tiedostonimeä.

*   Valitsimien g, p ja P järjestyksellä ei ole väliä s-komennossa.

Seuraavat lisäykset säännöllisten lausekkeiden kielioppiin on tehty.

*   \t tunnistetaan säännöllisissä lausekkeissa (ja muuallakin) sarkaimen pakottajana.

*   Säännöllisissä lausekkeissa + tarkoittaa, että edellinen pala esiintyy vähintään kerran.

Nämä ominaisuudet ovat uusia:

*   l-komento (listaus, dokumentoimaton ja huono versio tästä on olemassa jo BSD:ssä)

*   W-komento (kirjoita tekstipuskurin ensimmäinen rivi tiedostoon).

*   T-komento (hyppää viimeisen korvauksen epäonnistuessa).

*   Komentoriveillä komentojen perässä sallitaan nyt kommentit.

Myös sedin virheilmoitukset on tehty tarkemmiksi ja opettavaisemmiksi.

Tämä toteutus on myös huomattavasti pienempi ja nopeampi kuin BSD 4.1 sed. käyttää ainoastaan vakio-I/O-kirjastoja ja exit(3)-funktiota.

COPYING

This is a freeware component of the GNU and MINIX operating systems. The user is hereby granted permission to use, modify, reproduce and distribute it subject to the following conditions:

1. The authorship notice appearing in each source file may not be altered or deleted.

2. The object form may not be distributed without source.

KATSO MYÖS

ed(1), grep(1), awk(1), lex(1), regexp(5)

TEKIJÄ
Tämän mansivun kirjoitti Eric S. Raymond <esr@snark.thyrsus.com>, kuitenkin sed-paketti, jonka mukana tämä tulee on GNU:lta.