Johdanto
sed
komento, lyhyt stream editor, suorittaa editointi toiminnot tekstin tulee vakiosyötteestä tai tiedostosta. sed
editoi line-by-line ja ei-vuorovaikutteisesti.
Tämä tarkoittaa, että voit tehdä kaikki editointi päätöksiä kuten soittaa, komento, ja sed
suorittaa suuntiin automaattisesti., Tämä voi tuntua hämmentävältä tai tahattomalta, mutta se on erittäin tehokas ja nopea tapa muuttaa tekstiä, erityisesti osana komentosarjaa tai automaattista työnkulkua.
Tämä opetusohjelma kattaa joitakin perustoimintoja ja esittelee tämän muokkaimen käyttämiseen tarvittavan syntaksin. Sinun tulee lähes varmasti koskaan korvata tavallinen tekstieditori sed
, mutta se tulee todennäköisesti tervetullut lisä tekstin editointi työkalupakin.
Huom: Tämä opetusohjelma käyttää GNU-versio sed
löytyy Ubuntu ja muiden Linux-käyttöjärjestelmiä., Jos käytät macOS: ää, sinulla on BSD-versio, jossa on erilaisia vaihtoehtoja ja argumentteja. sed
GNU-version voi asentaa Homebrew-versiolla käyttäen brew install gnu-sed
.
peruskäyttö
sed
toimii virta tekstiä, että se lukee joko tekstitiedosto tai vakiosyötteestä (STDIN). Tämä tarkoittaa, että voit lähettää tulosteen toisen komennon suoraan sed muokkausta varten, tai voit työskennellä tiedoston, jonka olet jo luonut.,
kannattaa myös olla tietoinen siitä, että sed
lähtee oletuksena kaikki standard out (STDOUT). Tämä tarkoittaa, että, ellei ohjataan, sed
tulostaa sen lähtö näytön sijaan tallentamalla sen tiedostoon.
perus käyttö on:
- sed commands
tässä opetusohjelmassa, voit käyttää kopio BSD-ohjelmistolisenssin kokeilla sed
., Ubuntu, suorita seuraavat komennot kopioi BSD-lisenssi tiedosto kotihakemistoosi, joten voit työskennellä sen kanssa:
- cd
- cp /usr/share/common-licenses/BSD .
Jos sinulla ei ole paikallinen kopio BSD-lisenssi, luoda yksi itseäsi tällä komennolla:
- cat << 'EOF' > BSD
- Copyright (c) The Regents of the University of California.
- All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- EOF
käytetään sed
tarkastella sisältöä BSD-lisenssi tiedosto. sed
lähettää tuloksensa oletusarvoisesti näytölle, jolloin sitä voi käyttää tiedostonlukijana välittämällä sitä muokkaamatta komentoja., Kokeile suorittamalla seuraavan komennon:
- sed '' BSD
näet, BSD-lisenssi, joka näkyy näytöllä:
OutputCopyright (c) The Regents of the University of California.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsare met:1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.......
single quotes sisältävät editointi komentoja voit siirtää sed
. Tässä tapauksessa et läpäissyt sitä mitään, joten sed
painoi jokaisen saamansa rivin vakiotulokseen.
sed
voi käyttää standard input tiedoston sijaan., Putken lähtö cat
komento sed
tuottaa saman tuloksen:
- cat BSD | sed ''
näet lähtö tiedosto:
OutputCopyright (c) The Regents of the University of California.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsare met:1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.. . .. . .
Kuten näet, voit käyttää tiedostoja tai purojen teksti, kuten ne, jotka on tuotettu, kun putkiston ulostulo putki (|)
hahmo, yhtä helposti.
Tulostus Rivit
edellisessä esimerkissä, et näki, että tulo siirtyi sed
ilman mitään toimintaa tulostaa tulokset suoraan vakiotulosteeseen.,
tutkitaan sed
’s nimenomaista print
komento, joka määrittää käyttämällä p
merkin sisällä yhden lainausmerkkejä.
Suorita seuraava komento:
- sed 'p' BSD
näet jokainen rivi BSD
tiedosto painettu kahdesti:
OutputCopyright (c) The Regents of the University of California.Copyright (c) The Regents of the University of California.All rights reserved.All rights reserved.Redistribution and use in source and binary forms, with or withoutRedistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsmodification, are permitted provided that the following conditionsare met:are met:. . .. . .
sed
automaattisesti tulostaa jokaisen rivin oletuksena, ja sitten olet kertoi sen, tulostaa rivit, nimenomaisesti kanssa ”s” – komento, jotta saat jokaisen rivin painettu kahdesti.,
Jos olet tutkia lähtö tarkkaan, näet, että se on ensimmäinen rivi kahdesti, jonka jälkeen toinen linja kahdesti, jne, joka kertoo, että sed
toimii tiedot rivi kerrallaan. Se lukee viivan, toimii sillä ja antaa tuloksena olevan tekstin ennen kuin toistaa prosessin seuraavalla rivillä.
Voit puhdistaa tuloksia johtamalla -n
mahdollisuus sed
, joka estää automaattinen tulostus:
- sed -n 'p' BSD
OutputCopyright (c) The Regents of the University of California.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsare met:1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.. . .. . .
– Olemme nyt takaisin tulostus jokaisella rivillä vain kerran.,
tähänastisia esimerkkejä tuskin voidaan pitää editointina (ellet halunnut tulostaa jokaista riviä kahdesti…). Seuraavaksi tutkitaan, miten sed
pystyy muokkaamaan tuotosta kohdentamalla tekstitiedon tiettyjä osioita.
osoitealueita
osoitteiden avulla voit kohdistaa tekstivirran tiettyjä osia. Voit määrittää tietyn rivin tai jopa useita rivejä.
Anna sed
tulostaa tiedoston ensimmäisen rivin., Suorita seuraava komento:
- sed -n '1p' BSD
ensimmäinen rivi tulostuu näyttöön:
OutputCopyright (c) The Regents of the University of California.
asettamalla numero 1
ennen tulosta-komento, kerroit sed
linja numero toimia. Voit aivan yhtä helposti tulostaa viisi riviä (älä unohda ”-n”):
- sed -n '1,5p' BSD
näet tämän output:
OutputCopyright (c) The Regents of the University of California.All rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditions
Olet juuri antanut osoitteen alue sed
., Jos annatsed
osoitteen, se suorittaa vain näillä linjoilla seuraavat komennot. Tässä esimerkissä, olet käskenyt sed tulostaa linjan 1 kautta linjan 5. Sinulla voisi olla määritetty eri tavalla, antamalla ensimmäinen osoite ja sitten käyttää offset kertoa sed kuinka monta rivejä matkustaa, kuten tämä:
- sed -n '1,+4p' BSD
Tämä johtaa saman tuotoksen, koska kerroit sed
aloittaa rivillä 1 ja sitten käyttää seuraavan 4 riviä kuin hyvin.,
Jos haluat tulostaa joka toinen rivi, määritä aikaväli jälkeen ~
hahmo. Seuraava komento tulostaa joka toinen rivi BSD
tiedosto, alkaen rivi 1:
- sed -n '1~2p' BSD
Tässä on tuotos näet:
OutputCopyright (c) The Regents of the University of California.modification, are permitted provided that the following conditions1. Redistributions of source code must retain the above copyright2. Redistributions in binary form must reproduce the above copyright documentation and/or other materials provided with the distribution. may be used to endorse or promote products derived from this software. . .. . .
Voit käyttää sed
poista tekstin ulostulo samoin.,
Poistamalla Tekstiä
Voit suorittaa tekstin poistaminen, jos olet aiemmin olivat täsmennetään tekstiä tulostusta muuttamalla p
komento d
komento.
tässä tapauksessa, sinun ei enää tarvitse -n
komento, koska sed
tulostaa kaikki mikä ei ole poistettu. Tämä auttaa sinua näkemään, mitä on tekeillä.,
Muuttaa viimeisen komennon edellisen osan, jotta se
poista joka toinen rivi alkaa kanssa ensimmäinen:
- sed '1~2d' BSD
tuloksena on, että voit nähdä jokainen rivi et ole antanut viimeisen kerran:
OutputAll rights reserved.Redistribution and use in source and binary forms, with or withoutare met: notice, this list of conditions and the following disclaimer. notice, this list of conditions and the following disclaimer in the3. Neither the name of the University nor the names of its contributors without specific prior written permission.. . .. . .
on tärkeää huomata tässä, että meidän lähde tiedosto ei ole vaikuttanut. Se on yhä ehjä. Muokkaukset ovat lähtö meidän näytölle.,
Jos me haluamme pelastaa muokkauksia, voimme ohjata standardi lähtö tiedosto, kuten niin:
- sed '1~2d' BSD > everyother.txt
avaa tiedoston cat
:
- cat everyother.txt
näet sama lähtö, että et näki näytön aiemmin:
OutputAll rights reserved.Redistribution and use in source and binary forms, with or withoutare met: notice, this list of conditions and the following disclaimer. notice, this list of conditions and the following disclaimer in the3. Neither the name of the University nor the names of its contributors without specific prior written permission.. . .. . .
sed
komento ei muokata lähdetiedosto oletusarvoisesti, mutta voit muuttaa tätä käyttäytymistä johtamalla -i
vaihtoehto, joka tarkoittaa ”tehdä muokkauksia in-paikka.”Tämä muuttaa lähdetiedostoa.,
Varoitus: -i
kytkin korvaa alkuperäisen tiedoston, joten käytä tätä varoen. Suorittaa toiminnan ilman -i
kytke ensin ja sitten suorittaa komennon uudelleen -i
kun sinulla on mitä haluat, luoda varmuuskopio alkuperäisestä tiedostosta, tai ohjaa tuloste tiedostoon. On erittäin helppoa vahingossa muuttaa alkuperäistä tiedostoa -i
– kytkimellä.
kokeillaan sitä muokkaamalla everyother.txt
tiedosto juuri luotu, paikallaan., Anna on edelleen vähentää tiedoston poistamalla joka toinen rivi
uudelleen.
- sed -i '1~2d' everyother.txt
Jos käytät cat
näyttää tiedoston cat everyother.txt
näet, että tiedostoa on muokattu.
-i
vaihtoehto voi olla vaarallista. Onneksi sed
antaa mahdollisuuden luoda varmuuskopiotiedosto ennen muokkausta.,
Voit luoda varmuuskopio ennen muokkausta, lisää backup extension suoraan jälkeen ”-i” – vaihtoehto:
- sed -i.bak '1~2d' everyother.txt
Tämä luo varmuuskopio tiedoston kanssa .bak
tiedostotunnistetta, ja sitten muokkaa alkuperäisen tiedoston-paikka.
seuraavaksi katsotaan, miten sed
käytetään haku-ja korvausoperaatioiden suorittamiseen.
Korvaamalla Teksti
Ehkä kaikkein hyvin-tunnettu käyttö sed
korvataan tekstiä., sed
voi etsiä tekstikuvioita säännöllisillä lausekkeilla ja korvata sitten löytyneen tekstin jollain muulla.
voit oppia lisää säännöllisistä lausekkeista seuraamalla grep: n säännöllisiä lausekkeita etsiäksesi Tekstikuvioita Linuxista.
sen alkeellisinta muodossa, voit muuttaa yhden sana toisen sanaa käyttämällä seuraavaa syntaksia:
's/old_word/new_word/'
s
on korvata komennon. Eri tekstikentät erotetaan kolmesta viillosta (/
)., Voit käyttää muita merkkejä rajata kentät, jos se olisi enemmän hyötyä.
esimerkiksi, jos yrität vaihtaa verkkosivun nimeä, toisen rajaajan käyttäminen olisi hyödyllistä, koska URL-osoitteissa on viiltoja.
Suorita seuraava komento, jos haluat tulostaa URL echo
ja muokata sitä sed
käyttämällä alaviivaa (_
) – merkkiä erottimena:
- echo "http://www.example.com/index.html" | sed 's_com/index_org/home_'
Tämä korvaa com/index
org/home
., Lähtö näyttää modifed URL:
Output
Do not forget the final delimiter, or sed
will complain. If you ran this command:
- echo "http://www.example.com/index.html" | sed 's_com/index_org/home'
haluat nähdä tämän output:
Outputsed: -e expression #1, char 20: unterminated `s' command
luodaan uusi tiedosto harjoitella vaihtoja. Suorita seuraava komento luodaksesi uuden tekstitiedoston nimeltä song.txt
:
- echo "this is the song that never ends
- yes, it goes on and on, my friend
- some people started singing it
- not knowing what it was
- and they'll continue singing it forever
- just because..." > song.txt
Nyt korvata ilmaus on
forward
. Käytä seuraavaa komentoa:
- sed 's/on/forward/' song.txt
lähtö näyttää tältä:
Outputthis is the sforwardg that never endsyes, it goes forward and on, my friendsome people started singing itnot knowing what it wasand they'll cforwardtinue singing it foreverjust because...
Voit nähdä muutamia merkittäviä asioita täällä., Ensinnäkin, että sed
korvasi kuvioita, ei sanoja. on
sisällä song
muutetaan forward
.
toinen asia huomata on, että linjalla 2, toinen on
ei muuttunut forward
.
Tämä on, koska oletuksena s
komento toimii ensimmäinen ottelu linjan ja siirtyy sitten seuraavalle riville., Tehdä sed
vaihda joka esimerkiksi on
sen sijaan, että vain ensimmäisenä kullakin rivillä, sinun on läpäistävä valinnainen lippu korvaavan komennon.
Tarjota g
lipun korvata komennolla asettamalla sen jälkeen korvaaminen sarja:
- sed 's/on/forward/g' song.txt
näet tämän output:
Outputthis is the sforwardg that never endsyes, it goes forward and forward, my friendsome people started singing itnot knowing what it wasand they'll cforwardtinue singing it foreverjust because...
Nyt korvata komento muuttuu joka tapauksessa.,
Jos sinulla on vain halusi muuttaa toisen oikeusasteen tuomioistuin ”on”, että sed saa kullakin rivillä, sitten voit käyttää numero 2
sijaan g
:
- sed 's/on/forward/2' song.txt
Tällä kertaa muut linjat eivät muutu, koska heillä ei ole toinen esiintyminen:
Outputthis is the song that never endsyes, it goes on and forward, my friendsome people started singing itnot knowing what it wasand they'll continue singing it foreverjust because...
Jos haluat vain nähdä, mitkä linjat olivat korvata, käyttää -n
vaihtoehto taas tukahduttaa automaattinen tulostus.,
tämän jälkeen voit siirtää p
– vaihtoehdon korvaavaan komentoon tulostamaan rivejä, joissa substituutio tapahtui.
- sed -n 's/on/forward/2p' song.txt
linja, joka muutti tulostaa näyttö:
Outputyes, it goes on and forward, my friend
Kuten näette, voit yhdistää liput lopussa komento.
Jos haluat hakuprosessin sivuuttavan asian, voit välittää sen ”i” – lipulla.,
- sed 's/SINGING/saying/i' song.txt
Tässä on tuotos näet:
Outputthis is the song that never endsyes, it goes on and on, my friendsome people started saying itnot knowing what it wasand they'll continue saying it foreverjust because...
Korvaa ja Vertailemalla Sovitettu Teksti
Jos haluat löytää enemmän monimutkaisia kuvioita säännöllisiä lausekkeita, sinulla on useita eri menetelmiä vertailemalla hyväksytty kuvio korvaava teksti.,
esimerkiksi ottelun alusta rivi at
, käytä seuraavaa komentoa:
- sed 's/^.*at/REPLACED/' song.txt
näet tämän lähtö:
Output REPLACED never endsyes, it goes on and on, my friendsome people started singing itREPLACED it wasand they'll continue singing it foreverjust because...
Voit nähdä, että jokeri ilmaisun ottelut alusta linjan viimeinen, esimerkiksi at
.
Koska et tiedä tarkka lause, joka vastaa hakumerkkijonoa voit käyttää &
hahmo edustaa sovitettu teksti korvaava merkkijono.,
laitetaan suluissa ympäri sovitettu teksti:
- sed 's/^.*at/(&)/' song.txt
näet tämän output:
Output (this is the song that) never endsyes, it goes on and on, my friendsome people started singing it(not knowing what) it wasand they'll continue singing it foreverjust because...
joustavampi tapa löytymistä hyväksytty teksti on käyttää pakeni suluissa ryhmään osat sovitettu teksti.
Jokainen ryhmä etsi tekstiä merkitty suluissa voidaan viitata karannut viitenumero. Esimerkiksi, ensimmäinen suluissa ryhmään voidaan viitata \1
toinen \2
ja niin edelleen.,
tässä esimerkissä, me vaihtaa kahden ensimmäisen sanan jokaisen rivin:
- sed 's/\(*\) \(*\)/\2 \1/' song.txt
näet tämän output:
Output is this the song that never endsyes, goes it on and on, my friendpeople some started singing itknowing not what it wasthey and'll continue singing it foreverbecause just...
Kuten näette, tulokset eivät ole täydellisiä. Esimerkiksi toinen rivi ohittaa ensimmäisen sanan, koska siinä on merkki, jota ei ole merkitty merkistöömme. Samoin se käsitteli they'll
kahtena sanana viidennellä rivillä.
– Anna on parantaa säännöllinen lauseke olla tarkempi:
- sed 's/\(*\) \(*\)/\2 \1/' song.txt
näet tämän output:
Output is this the song that never endsit yes, goes on and on, my friendpeople some started singing itknowing not what it wasthey'll and continue singing it foreverbecause... just
Tämä on paljon parempi kuin viime kerralla., Tämä ryhmittelee välimerkin siihen liittyvään sanaan.
Huomaa, miten me toista lausekkeen sulkujen sisään (kerran ilman *
hahmo, ja sitten kun sen kanssa). Tämä johtuu siitä, että *
merkki vastaa sitä edeltävää merkkijoukkoa nolla-tai useampaan kertaan. Tämä tarkoittaa, että ottelu Jokereilla katsottaisiin ”otteluksi”, vaikka kuviota ei löytyisikään.
varmistetaan, että sed
havaitsee tekstissä ainakin kerran, sinun tulee vastata sitä kerran ilman jokerina ennen työllistävät jokeri.,
Johtopäätös
tämä opetusohjelma voit tutkia sed
komento. Voit tulostaa tietyt rivit tiedostosta, etsinyt tekstiä, poistaa rivit, korvasi alkuperäisen tiedoston, ja käyttää säännöllisiä lausekkeita korvata tekstiä. Sinun pitäisi pystyä näkemään jo, miten voit nopeasti muuttaa tekstidokumentin käyttämällä oikein rakennettuja sed-komentoja.
seuraavassa kirjoituksessa tässä sarjassa tutustut joihinkin kehittyneempiin ominaisuuksiin.