15 Sed-komentovinkkiä Linux-järjestelmän hallintatehtäviin


Jokaisen järjestelmänvalvojan on käsiteltävä tekstitiedostoja päivittäin. Tiettyjen osioiden tarkastelu, sanojen korvaaminen ja sisällön suodattaminen näistä tiedostoista ovat taitoja, jotka sinun on oltava käteviä ilman, että sinun tarvitsee tehdä Google-hakua.

Tässä artikkelissa tarkastelemme sed:tä, tunnettua stream-editoria, ja jaamme 15 vinkkiä sen käyttämiseen, jotta voit saavuttaa aiemmin mainitut tavoitteet ja paljon muuta.

Mikä on Sed Command?

sed-komento, lyhenne sanoista stream editor, on monipuolinen ja tehokas tekstinkäsittelytyökalu, joka toimii tekstivirroissa. Sen avulla käyttäjät voivat suorittaa datalle erilaisia toimintoja, kuten etsiä, korvata, lisätä ja poistaa. 'Sed' käyttää säännöllisiä lausekkeita tekstinkäsittelyn kuvioiden määrittämiseen, ja sitä voidaan käyttää erämuokkaustehtäviin ja tekstinkäsittelyyn skripteissä.

Yksi sen merkittävistä ominaisuuksista on paikallaan tapahtuva muokkaus, jossa se voi muokata tiedostoja suoraan tai luoda varmuuskopioita samalla kun tekee muutoksia. "Sed" on tärkeä työkalu järjestelmänvalvojille, ohjelmoijille ja kaikille, jotka käsittelevät tekstin muunnos- ja tietojenkäsittelytehtäviä komentorivillä.

Seuraavassa on joitain yleisiä sed-komentoja esimerkkeineen:

1. Tiedoston rivialueen tarkasteleminen

Työkalujen, kuten pään ja hännän, avulla voimme tarkastella tiedoston ala- tai yläosaa. Entä jos meidän on katsottava osio keskellä? Seuraava sed one-liner palauttaa rivit 510 tiedostosta tecmint.txt:

sed -n '5,10p' tecmint.txt

2. Tarkastelee koko tiedostoa tiettyä aluetta lukuun ottamatta

Toisaalta on mahdollista, että haluat tulostaa koko tiedoston tiettyä aluetta lukuun ottamatta. Voit sulkea pois rivit 2035 tiedostosta tecmint.txt seuraavasti:

sed '20,35d' myfile.txt

3. Ei-peräkkäisten linjojen ja alueiden tarkastelu

On mahdollista, että olet kiinnostunut joukosta ei-peräkkäisiä rivejä tai useammasta kuin yhdestä alueesta. Näytetään rivit 5-7 ja 10-13 tiedostosta tecmint.txt:

sed -n -e '5,7p' -e '10,13p' tecmint.txt

Kuten näet, -e-vaihtoehto antaa meille mahdollisuuden suorittaa tietyn toiminnon (tässä tapauksessa tulostaa rivit) jokaiselle alueelle.

4. Sanojen tai merkkijonojen korvaaminen tiedostossa

Voit korvata jokaisen sanan versio esiintymän sanalla story tiedostossa tecmint.txt seuraavasti:

sed 's/version/story/g' tecmint.txt

Lisäksi sinun kannattaa harkita gi-komentoa g:n sijaan, jotta voit jättää huomioimatta isot ja pienet kirjaimet:

sed 's/version/story/gi' myfile.txt

Korvaaksemme useita tyhjiä välilyöntejä yhdellä välilyönnillä käytämme komennon ip route show tulostetta liukuhihnalla:

ip route show | sed 's/  */ /g'

Vertaa ip route show:n tulosta liukuhihnan kanssa ja ilman:

5. Sanojen tai merkkijonojen korvaaminen alueen sisällä

Jos olet kiinnostunut korvaamaan sanoja vain rivivälillä (esimerkiksi 30 - 40), voit tehdä:

sed '30,40 s/version/story/g' tecmint.txt

Tietenkin voit osoittaa yksittäisen rivin sen vastaavan numeron kautta alueen sijasta.

6. Poista kommentit tiedostosta

Joskus asetustiedostoihin ladataan kommentteja. Vaikka tämä on varmasti hyödyllistä, voi joskus olla hyödyllistä näyttää vain konfigurointiohjeet, jos haluat nähdä ne kaikki yhdellä silmäyksellä.

Voit poistaa tyhjät rivit tai kirjaimella # alkavat rivit Apache-määritystiedostosta seuraavasti:

sed '/^#\|^$\| *#/d' httpd.conf

Caret-merkkiä seuraa numeromerkki (^#) osoittaa rivin alun, kun taas ^$ edustaa tyhjiä rivejä. Pystypalkit osoittavat loogisia operaatioita, kun taas taaksepäin suunnattua kauttaviivaa käytetään pystysuorien paljojen pakoon.

Tässä nimenomaisessa tapauksessa Apache-määritystiedostossa on rivejä, joissa #:t ei ole joidenkin rivien alussa, joten myös *#-koodia käytetään poistamaan ne.

7. Korvaa tiedostossa sana, jossa kirjainkoolla ei ole merkitystä

Korvaaksemme isoilla tai pienillä kirjaimilla alkavan sanan toisella sanalla voimme myös käyttää sed-komentoa. Havainnollistamiseksi, korvataan sana zip tai Zip sanalla rar tiedostossa tecmint.txt:

sed 's/[Zz]ip/rar/g' tecmint.txt

8. Tiettyjen tapahtumien etsiminen lokitiedostosta

Toinen sed -komentosarjan käyttötarkoitus on tulostaa tiedostosta rivit, jotka vastaavat tiettyä säännöllistä lauseketta. Saatamme esimerkiksi olla kiinnostuneita näkemään valtuutus ja todennus -toiminnot, jotka tapahtuivat 2. heinäkuuta, /var /log/secure kirjaudu sisään CentOS-palvelimeen.

Tässä tapauksessa haettava malli on 2. heinäkuuta jokaisen rivin alussa:

sed -n '/^Jul  1/ p' /var/log/secure

9. Välilyöntien tai tyhjien rivien lisääminen tiedostoon

sed-toiminnolla voimme myös lisätä välilyöntejä (tyhjiä rivejä) jokaiselle tiedoston riville, joka ei ole tyhjä. Jos haluat lisätä yhden tyhjän rivin joka toiselle riville tekstitiedostoon LICENSE, toimi seuraavasti:

sed G tecmint.txt

Voit lisätä kaksi tyhjää riviä seuraavasti:

sed 'G;G' tecmint.txt

Lisää iso G puolipisteellä erotettuna, jos haluat lisätä tyhjiä rivejä. Seuraava kuva havainnollistaa tässä vihjeessä esitettyä esimerkkiä:

Tämä vihje voi olla hyödyllinen, jos haluat tarkastella suurta asetustiedostoa. Tyhjän tilan lisääminen joka toiselle riville ja ulostulon putoaminen pienemmälle johtaa ystävällisemmälle lukukokemukselle.

10. ^M:n poistaminen tiedostosta

dos2unix-ohjelma muuntaa pelkät tekstitiedostot Windows/Mac-muodosta Unix/Linux-muotoon ja poistaa piilotetut rivinvaihtomerkit, jotka on lisätty joidenkin näissä alustoissa käytettyjen tekstieditorien avulla. Jos sitä ei ole asennettu Linux-järjestelmääsi, voit jäljitellä sen toimintoja sed-komennolla sen asentamisen sijaan.

Vasemmalla olevassa kuvassa näemme useita DOS:n rivinvaihtomerkkejä (^M), jotka myöhemmin poistettiin:

sed -i 's/\r//' myfile.txt

Huomaa, että -i-vaihtoehto tarkoittaa paikan päällä tapahtuvaa muokkausta. Muutoksia ei tällöin palauteta näyttöön, vaan ne tallennetaan tiedostoon.

Huomaa: voit lisätä DOS-rivinvaihtomerkkejä, kun muokkaat tiedostoa Vim-editorissa painikkeilla Ctrl+V ja Ctrl+M.

11. Luo varmuuskopiotiedosto Sed-komennolla

Edellisessä vihjeessä käytimme sed-työkalua tiedoston muokkaamiseen, mutta emme tallentaneet alkuperäistä tiedostoa. Joskus on hyvä idea tallentaa varmuuskopio alkuperäisestä tiedostosta varmuuden vuoksi.

Voit tehdä tämän osoittamalla -i-vaihtoehdon jälkeen (yksittäisten lainausmerkkien sisällä), jota käytetään alkuperäisen tiedoston nimeämiseen.

Seuraavassa esimerkissä korvaamme kaikki tämä tai Tämä (jätämme kirjainkoon huomioimatta) esiintymät omatiedosto.txt-tiedostossa, ja tallennamme alkuperäinen tiedosto muodossa omatiedosto.txt.orig.

Lopuksi käytämme diff-apuohjelmaa tunnistamaan erot molempien tiedostojen välillä:

sed -i'.orig' 's/this/that/gi' myfile.txt

12. Sanaparien vaihtaminen tiedostossa

Oletetaan, että sinulla on tiedosto, joka sisältää täydet nimet muodossa Etunimi, Sukunimi. Voit käsitellä tiedoston asianmukaisesti vaihtamalla Sukunimi ja Etunimi.

Voimme tehdä sen sedillä melko helposti:

sed 's/^\(.*\),\(.*\)$/\, /g' names.txt

Yllä olevassa kuvassa näemme, että sulkumerkit, jotka ovat erikoismerkkejä, on käytettävä koodinvaihtovälillä, samoin kuin numerot 1 ja 2.

Nämä numerot edustavat korostettuja säännöllisiä lausekkeita (jonka on oltava sulkeissa):

  • 1 edustaa jokaisen rivin alkua pilkkuun asti.
  • 2 on paikkamerkki kaikelle, mikä on rivin lopussa olevan pilkun kohdalla.

Haluttu tulos ilmoitetaan muodossa Toinen sarake (Sukunimi) + pilkku + välilyönti + Ensimmäinen sarake (Etunimi). Voit vapaasti vaihtaa sen haluamaksesi.

13. Sanojen korvaaminen vain, jos erillinen vastaavuus löytyy

Joskus tietyn sanan kaikkien esiintymien tai satunnaisten muutaman esiintymän korvaaminen ei ole juuri sitä, mitä tarvitsemme. Ehkä meidän on suoritettava vaihto, jos erillinen vastaavuus löytyy.

Saatamme esimerkiksi haluta korvata sanan aloitus sanalla stop vain, jos sana palvelut löytyvät samalta riviltä. Tässä skenaariossa tapahtuu seuraavaa:

We need to start partying at work,
but let’s remember to start all services first.

Ensimmäisellä rivillä aloitus ei korvata sanalla stop, koska sana palvelut eivät näy tällä rivillä toisin kuin toisella rivillä.

sed '/services/ s/start/stop/g' msg.txt

14. Kahden tai useamman vaihdon suorittaminen kerralla

Voit yhdistää kaksi tai useampia korvauksia yhteen sed-komentoon. Korvataan sanat that ja rivi tiedostossa omatiedosto.txt sanoilla Tämä ja jae.

Huomaa, kuinka tämä voidaan tehdä käyttämällä tavallista sed-korvauskomentoa, jota seuraa puolipiste ja toinen korvauskomento:

sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt

Tämä vinkki on havainnollistettu seuraavassa kuvassa:

15. Sedin ja muiden komentojen yhdistäminen

Tietenkin sed voidaan yhdistää muihin Linux-komentoihin tehokkaampien komentojen luomiseksi. Käytetään esimerkiksi kohdassa VINKKI 4 annettua esimerkkiä ja poimitaan IP-osoitteemme ip route-komennon lähdöstä.

Aloitamme tulostamalla vain sen rivin, jolla sana src on. Sitten muunnamme useita välilyöntejä yhdeksi. Lopuksi leikataan yhdeksäs kenttä (jota pidetään kenttien erottimena), jossa IP-osoite on:

ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

Alla oleva kuva havainnollistaa yllä olevan komennon jokaista vaihetta:

Yhteenveto

Tässä oppaassa olemme jakaneet 15 sed-vinkkiä ja temppuja, jotka auttavat sinua päivittäisten järjestelmänhallintatehtävissäsi. Onko sinulla muita vinkkejä, joita käytät säännöllisesti ja jonka haluaisit jakaa meidän ja muun yhteisön kanssa?

Jos näin on, ilmoita meille vapaasti alla olevan kommenttilomakkeen avulla. Myös kysymykset ja kommentit ovat tervetulleita – odotamme kuulevamme!