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 5–10 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 20–35 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!