sed | |
---|---|
Tyyppi | tietokoneohjelma , UNIX [d] -apuohjelma , tekstieditori ja komentosarjakieli |
Kehittäjä | Lee McMahon [d] [1] |
Käyttöjärjestelmä | Unix-tyyppinen käyttöjärjestelmä |
Ensimmäinen painos | 1974 |
uusin versio | 4.8 ( 15. tammikuuta 2020 ) |
Verkkosivusto | gnu.org/software/sed/ |
sed ( englanniksi. S tream ED itor ) on suoratoistotekstieditori (sekä ohjelmointikieli ), joka soveltaa erilaisia ennalta määritettyjä tekstimuunnoksia tekstidatan sarjavirtaan.
Sen kirjoitti alun perin UNIX - apuohjelmaksi Bell Labsin Lee E. McMahon vuosina 1973-74 . sed on nyt saatavilla käytännössä kaikille käyttöjärjestelmille, jotka tukevat komentorivityötä .
Sed on Turingin täydellinen kieli, koska sitä voidaan käyttää Turingin koneen luomiseen [2] [3] .
sed ottaa syöttövirran (yleensä tiedoston) rivi riviltä, muokkaa jokaista riviä sed- komentosarjassa määritettyjen sääntöjen mukaisesti käyttämällä yksinkertaista sed -kieltä ja tulostaa sitten tuloksen tulosvirtaan.
sediä kutsutaan usein ei-interaktiiviseksi tekstieditoriksi. Se eroaa tavallisista tekstieditoreista "inversiolla" suhteessa tekstiin ja muokkauskomentoihin. Tavalliset tekstieditorit lataavat ensin asiakirjan koko tekstin ja käyttävät sitten siihen komentoja yksi kerrallaan, kun taas sed lataa ensin joukon komentoja itseensä ja soveltaa sitten koko komentosarjaa jokaiselle tekstiriville. Koska muistissa on vain yksi rivi kerrallaan, sed voi käsitellä mielivaltaisen suuria tekstitiedostoja.
Sed - komentosarja on mallinnettu ed -editorin mukaan, mutta ole tietoinen sen käänteisestä. Esimerkiksi ed:n 25d-komento tarkoittaa " siirry riville 25 ja poista se ", kun taas sama sed -komento tarkoittaa " jos se on rivinumero 25, poista (älä tulosta) se ". Merkittävä poikkeus ovat kopiointi- ja siirtokomennot, jotka kattavat useita rivejä ja joilla ei siten ole suoria sed -vastineita . Sen sijaan sed ottaa käyttöön ylimääräisen puskurin nimeltä "kaappaustila" ja lisäkomentoja sen käsittelemiseksi. Esimerkiksi komento " kopioi rivi 25 riville 76 " ( 25t76 ) ed :ssä koodataan kahdeksi erilliseksi komennona ( 25h; 76g ) sedissä rivin tallentamiseksi kaappaustilaan, kunnes tiedot haetaan.
Seuraava esimerkki havainnollistaa tyypillistä sed :n käyttöä :
sed -e 's/oldstuff/newstuff/g' inputFileName > outputTiedostonimiTässä on korvaava; g on globaali, mikä tarkoittaa " kaikki haetun arvon esiintymät ". Ensimmäisen vinoviivan jälkeen on säännöllinen lauseke etsittäväksi, toisen jälkeen korvaava lauseke. Kenoviivan lisäksi voidaan kuitenkin käyttää toista merkkiä. Siis esimerkiksi ilmaisut
echo 123123 | sed 's/1/5/g' echo 123123 | sed 's%1%5%g' echo 123123 | sed 's$1$5$g' echo 123123 | sed 's|1|5|g'ovat täysin samanarvoisia.
Korvauskomento (s///) on tehokkain ja yleisimmin käytetty sed -komento . Stdout-uudelleenohjaus " > outputFileName" voidaan jättää pois, jolloin sed tulostaa tuloksen näytölle.
Unixissa sed - komentoa käytetään usein suodattimena liukuhihnassa ( | tai pipe):
genero_data | sed -e 's/x/y/'Tällä tavalla data luodaan ja siirretään liukuhihnalle, joka korvaa x :n y :llä .
Useita komentoja voidaan yhdistää yhteen tiedostoon (esimerkiksi subst.sed) ja käyttää sitten seuraavasti:
sed -f subst.sed inputFileName > outputFileNameTai voit kirjoittaa skriptitiedoston käyttämällä shebangia . Esimerkiksi luomalla suoritettavan tiedoston subst.sed, jonka sisältö on:
#!/bin/sed -f s/x/y/gSe voidaan tehdä suoraan:
subst.sed inputFileName > outputFileNameVaihtamisen lisäksi muut yksinkertaiset käsittelytavat ovat mahdollisia. Esimerkiksi seuraava komentosarja poistaa tyhjät rivit tai rivit, jotka sisältävät vain välilyöntejä:
sed -e '/^\s*$/d' inputFileNameViimeisessä esimerkissä käytettiin säännöllisten lausekkeiden metamerkkiosaa:
sed :n monimutkaiset rakenteet ovat mahdollisia siinä määrin, että sitä voidaan pitää erittäin erikoistuneena, vaikkakin yksinkertaisena ohjelmointikielenä . Ohjauskulkua voidaan ohjata esimerkiksi tunnisteella (kaksoispiste, jota seuraa merkkijono, jonka pitäisi olla tarran nimi) ja b haarakäskyllä ; b - lause , jota seuraa kelvollinen nimiön nimi, siirtää käsittelyn nimiön jälkeiseen lohkoon; jos tunnistetta ei ole olemassa, haara päättää komentosarjan ( script ).
sed on yksi varhaisimmista Unix-komennoista, jonka avulla voit käsitellä datatiedostoja komentoriviltä. sed on kehittynyt suositun grep-komennon luonnolliseksi seuraajaksi . Myöhemmän AWK -ohjelmointikielen tapaan sed salli tehokkaan ja mielenkiintoisen tietojenkäsittelyn komentotulkkikomentosarjoissa ja oli yksi ensimmäisistä Unix-työkaluista, jotka kannustivat säännöllisten lausekkeiden oikeaan käyttöön.
Suoritusnopeuden suhteen sed on huomattavasti nopeampi kuin AWK.
sed ja awk pidetään usein Perl-kielen ja erityisesti " " syntaksin s///esi- ja inspiroijana yllä olevasta esimerkistä.
Sed - kielessä ei ole muuttujia, vain GOTO -primitiivi- ja haarautumistoiminto; Se on kuitenkin Turingin täydellinen kieli.
GNU sed sisältää useita uusia ominaisuuksia, kuten tiedostojen korvaavan muokkauksen (alkuperäisen tiedoston korvaaminen sed :n lähdöllä ). Paikalla muokkausta käytetään usein esimerkiksi ed -skriptin sijasta
sed -i 's/abc/def/' -tiedostovoidaan käyttää sen sijaan
ed-tiedosto 1 ,$ s/abc/def/ w qSed:stä on laajennettu versio nimeltä Super-sed ( ssed ) , joka sisältää Perl-yhteensopivia säännöllisiä lausekkeita .
HEX-16:n avulla voit lisätä erikoismerkkejä
Hahmo ASCII:ssa | Yhdenmukaisuus HEX-16:ssa |
---|---|
" | \x22 |
' | \x27 |
, | \x2C |
$ | \x24 |
! | \x21 |
; | \x3B |
` | \x60 |
| | \x7C |
Käyttöesimerkki:
Pakollinen: korvaa "hello" sanalla "hello world"
sed 's/\x22hello\x22\x2C/\x22hello world\x22\x2C/g'Joitakin HEX-16:n merkkejä käsitellään edelleen säännöllisinä lausekkeina, ja ne vaativat koodinvaihtomerkin.
Esimerkki:
Pakollinen: korvaa $config['default_host'] = ''; to $config['default_host'] = ' localhost ';
sed -i 's/\x24config\[\x27default_host\x27\] = \x27\x27\x3B/\x24config\[\x27default_host\x27\] = \x27localhost\x27\x3B/gcu' /etc/iground .inc.php
|
|
Unix-komennot | ||||||||
---|---|---|---|---|---|---|---|---|
|
Ohjelmointikielet | |
---|---|
|
Tekstieditorit ( lista ) | |
---|---|
Unix / Linux | |
DOS | |
Windows | |
Cross-platform | |
SDK | |
Toiminnot |