Welcome to Our Website

Perusasiat Käyttää Sed Stream editor Manipuloida Tekstiä Linux

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.

Launch an Interactive Terminal!

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ä:

Output
Copyright (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:

Output
Copyright (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:

Output
Copyright (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
Output
Copyright (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:

Output
Copyright (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:

Output
Copyright (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:

Output
Copyright (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:

Output
All 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:

Output
All 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:

Output
sed: -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ä:

Output
this 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:

Output
this 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:

Output
this 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ö:

Output
yes, 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:

Output
this 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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *