15 hyödyllistä sed-komentovinkkiä päivittäisiin Linux-järjestelmänhallintatehtäviin


Jokaisen järjestelmänvalvojan on käsiteltävä yksinkertaisia tekstitiedostoja päivittäin. Tietämys tiettyjen osioiden tarkastelemisesta, sanojen korvaamisesta ja sisällön suodattamisesta kyseisistä tiedostoista on taitoja, jotka sinun on oltava kätevä tekemättä Google-hakua.

Tässä artikkelissa käymme läpi tunnetun stream-editorin sed, ja jaamme 15 vinkkiä sen käyttämiseksi aiemmin mainittujen ja muiden tavoitteiden saavuttamiseksi.

1. Asiakirjan rivialueen tarkasteleminen

Työkalut, kuten pää ja häntä, antavat meille mahdollisuuden tarkastella tiedoston alaosaa tai yläosaa. Entä jos meidän on katsottava osa keskeltä? Seuraava sed-one-liner palauttaa rivit 5-10 myfile.txt-tiedostosta:

# sed -n '5,10p' myfile.txt

2. Koko tiedoston tarkastelu lukuun ottamatta tiettyä aluetta

Toisaalta on mahdollista, että haluat tulostaa koko tiedoston tietyn alueen lukuun ottamatta. Voit sulkea rivit 20-35 myfile.txt-tiedostoon seuraavasti:

# sed '20,35d' myfile.txt

3. Ei-peräkkäisten viivojen ja alueiden tarkasteleminen

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

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

Kuten näette, -e -vaihtoehdon avulla voimme suorittaa tietyn toiminnon (tässä tapauksessa rivien tulostamisen) kullekin alueelle.

4. Sanojen tai merkkien korvaaminen (peruskorvaus)

Jos haluat korvata sanan version kaikki esiintymät story -tiedostoilla myfile.txt-tiedostossa, toimi seuraavasti:

# sed 's/version/story/g' myfile.txt

Voit myös harkita gi : n käyttämistä g : n sijaan, jotta sivuutat merkkien:

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

Jos haluat korvata useita tyhjiä välilyöntejä yhdellä välilyönnillä, käytämme ip route show -lähtöä ja putkea:

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

Vertaa ip route show -lähtöä putkilinjaan ja ilman sitä:

5. Korvaa sanat tai merkit alueen sisällä

Jos haluat korvata sanat vain rivialueella (esimerkiksi 30–40), voit tehdä seuraavaa:

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

Tietenkin voit ilmoittaa yhden rivin vastaavan numeron kautta alueen sijasta.

6. Säännöllisten lausekkeiden käyttö (edistynyt korvaaminen) - I

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

Poista tyhjät tai # -alkuiset rivit Apache-määritystiedostosta seuraavasti:

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

Alaviite ja numeromerkki (^#) ilmaisevat rivin alun, kun taas ^$ edustaa tyhjiä rivejä. Pystysuorat palkit osoittavat loogisia operaatioita, kun taas taaksepäin olevaa kauttaviivaa käytetään välttämään pystysuorat palkit.

Tässä tapauksessa Apache-määritystiedostossa on rivejä, joissa # ’s ei ole joidenkin rivien alussa, joten * # käytetään myös niiden poistamiseen.

7. Säännöllisten lausekkeiden käyttö (edistynyt korvaaminen) - II

Korvaamalla isoilla tai pienillä kirjaimilla alkavan sanan toisella sanalla voimme käyttää myös sed. Korvataan havainnollistamiseksi sanan zip tai Zip sanalla rar tiedostotiedostossa myfile.txt:

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

8. Tietyn kuvion sisältävien viivojen katselu

Toinen sedin käyttö koostuu rivien tulostamisesta tiedostosta, jotka vastaavat tiettyä säännöllistä lauseketta. Esimerkiksi, voimme olla kiinnostuneita tarkastelemaan 2. heinäkuuta tapahtuneita valtuutus- ja todennustoimintoja CentOS 7 -palvelimen/var/log/secure-lokin mukaisesti.

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

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

9. Välilyöntien lisääminen tiedostoihin

Sedillä voimme lisätä tiedostoon myös välilyönnit (tyhjät rivit) jokaiselle ei-tyhjälle riville. Jos haluat lisätä yhden tyhjän rivin joka toinen rivi LICENSE-tekstitiedostoon, toimi seuraavasti:

# sed G myfile.txt

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

# sed 'G;G' myfile.txt

Lisää isot kirjaimet G erotettu puolipisteellä, jos haluat lisätä tyhjiä rivejä. Seuraava kuva havainnollistaa tässä vinkissä esitettyä esimerkkiä:

Tämä vinkki voi olla hyödyllinen, jos haluat tarkastaa suuren kokoonpanotiedoston. Tyhjän tilan lisääminen joka toinen rivi ja ulostulon piirtäminen pienempään johtaa mukavampaan lukukokemukseen.

10. Dos2unix-emulointi sisäisellä muokkauksella

Dos2unix-ohjelma muuntaa pelkkätekstitiedostot Windows/Mac-muotoilusta Unixiksi/Linuxiksi poistamalla piilotetut uuden rivin merkit, jotka jotkut kyseisillä alustoilla käytetyt tekstieditorit käyttävät. Jos sitä ei ole asennettu Linux-järjestelmään, voit jäljitellä sen toimintoja sedillä asennuksen sijaan.

Vasemmalla olevassa kuvassa näkyy useita DOS-uuden rivin merkkejä (^M) , jotka poistettiin myöhemmin:

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

Huomaa, että -i -vaihtoehto osoittaa paikan muokkaamisen. Sitten muutoksia ei palauteta näyttöön, vaan ne tallennetaan tiedostoon.

Huomaa: Voit lisätä DOS-uuden rivin merkkejä muokatessasi tiedostoa vim-editorissa Ctrl + V - ja Ctrl + M -näppäimillä.

11. Alkuperäisen tiedoston muokkaus ja varmuuskopiointi paikan päällä

Edellisessä vihjeessä käytimme sed-tiedostoa muokkaamaan tiedostoa, mutta emme tallentaneet alkuperäistä tiedostoa. Joskus on hyvä tallentaa varmuuskopio alkuperäisestä tiedostosta joka tapauksessa.

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

Seuraavassa esimerkissä korvataan kaikki tämän tai tämän (tapausta huomiotta jättävät) esiintymät tiedostolla myfile.txt ja tallennamme alkuperäisen tiedoston nimellä myfile.txt.orig.

Lopuksi käytämme diff-apuohjelmaa erottamaan molemmat tiedostot:

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

12. Sanaparien vaihtaminen

Oletetaan, että sinulla on tiedosto, joka sisältää täydelliset nimet muodossa Etunimi, Sukunimi. Jos haluat käsitellä tiedostoa riittävästi, kannattaa vaihtaa sukunimi ja etunimi.

Voimme tehdä sen sedillä melko helposti:

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

Yllä olevasta kuvasta voimme nähdä, että suluissa on oltava erikoismerkkejä, kuten numerot 1 ja 2.

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

  1. 1 edustaa jokaisen rivin alkua pilkkuun asti.
  2. 2 on paikkamerkki kaikelle, mikä on pilkulla rivin lopussa.

Haluttu tulos näkyy muodossa SecondColumn (Sukunimi) + pilkku + välilyönti + FirstColumn (Etunimi). Voit vapaasti vaihtaa sen mihin tahansa.

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

Joskus kaikkien sanan tai satunnaisten sanojen korvaaminen ei ole juuri sitä mitä tarvitsemme. Ehkä meidän on suoritettava vaihto, jos löytyy erillinen ottelu.

Haluamme esimerkiksi korvata aloituksen lopetuksella vain, jos sana palvelut löytyy samalla rivillä. Tässä tilanteessa tapahtuu näin:

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

Ensimmäisellä rivillä alkua ei korvata lopetuksella, koska sana palvelut ei näy kyseisellä rivillä toisin kuin toinen.

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

14. Suoritetaan kaksi tai useampia korvauksia kerralla

Voit yhdistää kaksi tai useampia korvauksia yhden yksittäisen sed-komennon. Korvataan sanat that ja line in myfile.txt sanoilla This ja jae.

Huomaa, miten 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 kuvattu seuraavassa kuvassa:

15. Sedin ja muiden komentojen yhdistäminen

Tietysti sed voidaan yhdistää muihin työkaluihin tehokkaampien komentojen luomiseksi. Käytetään esimerkiksi VINKKI # 4: ssä olevaa esimerkkiä ja puretaan IP-osoitteemme ip route -komennon lähdöstä.

Aloitetaan tulostamalla vain rivi, jossa sana src on. Sitten muunnamme useita välilyöntejä yhdeksi. Lopuksi leikkaamme yhdeksännen kentän (ottaen huomioon yhden tilan kentän erottimena), missä IP-osoite on:

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

Alla oleva kuva kuvaa yllä olevan komennon jokaisen vaiheen:

Yhteenveto

Tässä oppaassa olemme jakaneet 15 sed-vinkkiä ja temppua, jotka auttavat sinua päivittäisissä järjestelmänhallintatehtävissäsi. Onko olemassa muita vihjeitä, joita käytät säännöllisesti ja jotka haluat jakaa kanssamme ja muun yhteisön kanssa?

Jos on, ilmoita siitä meille alla olevan kommenttilomakkeen avulla. Kysymykset ja kommentit ovat myös tervetulleita - odotamme kuulevamme sinulta!