15 Sed komandų patarimų Linux sistemos administravimo užduotims atlikti


Kiekvienas sistemos administratorius turi kasdien dirbti su paprasto teksto failais. Žinojimas, kaip peržiūrėti tam tikrus skyrius, kaip pakeisti žodžius ir filtruoti turinį iš tų failų, yra įgūdžiai, kuriuos reikia turėti po ranka neatliekant „Google“ paieškos.

Šiame straipsnyje apžvelgsime sed, gerai žinomą srautų rengyklę, ir pasidalinsime 15 patarimų, kaip ją naudoti, kad pasiektumėte anksčiau minėtus tikslus ir dar daugiau.

Kas yra Sed komanda?

Komanda „sed“, trumpinys iš žodžių srauto rengyklė, yra universalus ir galingas teksto manipuliavimo įrankis, veikiantis teksto srautuose, leidžiantis naudotojams atlikti įvairias operacijas su duomenimis, pvz., ieškoti, pakeisti, įterpti ir Ištrinti. „Sed“ naudoja reguliarias išraiškas, kad apibrėžtų teksto manipuliavimo šablonus, ir gali būti naudojamas paketinio redagavimo užduotims ir teksto apdorojimui scenarijuose.

Viena iš svarbiausių jo funkcijų yra redagavimas vietoje, kai jis gali tiesiogiai modifikuoti failus arba kurti atsargines kopijas darydamas pakeitimus. „Sed“ yra esminis įrankis, skirtas sistemos administratoriams, programuotojams ir visiems, kurie susiduria su teksto transformavimo ir duomenų tvarkymo užduotimis komandinėje eilutėje.

Toliau pateikiamos kelios įprastos „sed“ komandos su pavyzdžiais:

1. Failo eilučių diapazono peržiūra

Tokie įrankiai kaip galva ir uodega leidžia peržiūrėti failo apačią arba viršų. Ką daryti, jei reikia peržiūrėti skyrių viduryje? Šis sed vienas eilutes pateiks 510 eilutes iš tecmint.txt:

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

2. Viso failo, išskyrus nurodytą diapazoną, peržiūra

Kita vertus, gali būti, kad norite spausdinti visą failą, išskyrus tam tikrą diapazoną. Jei norite išskirti 2035 eilutes iš tecmint.txt, atlikite toliau nurodytus veiksmus.

sed '20,35d' myfile.txt

3. Nenuoseklių linijų ir diapazonų peržiūra

Gali būti, kad jus domina ne vienas po kito einančių eilučių rinkinys arba daugiau nei vienas diapazonas. Parodykime 5–7 ir 10–13 eilutes iš tecmint.txt:

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

Kaip matote, parinktis -e leidžia atlikti tam tikrą veiksmą (šiuo atveju spausdinti eilutes) kiekvienam diapazonui.

4. Žodžių arba eilučių keitimas faile

Jei norite pakeisti kiekvieną žodžio version atvejį storija faile tecmint.txt, atlikite toliau nurodytus veiksmus.

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

Be to, galbūt norėsite naudoti gi, o ne g, kad nepaisytumėte didžiųjų raidžių:

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

Norėdami pakeisti kelias tuščias vietas vienu tarpu, naudosime komandos ip route show išvestį su konvejeriu:

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

Palyginkite ip route show išvestį su dujotiekiu ir be jo:

5. Žodžių arba eilučių pakeitimas diapazone

Jei norite pakeisti žodžius tik eilučių diapazone (pavyzdžiui, nuo 30 iki 40), galite:

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

Žinoma, galite nurodyti vieną eilutę per atitinkamą numerį, o ne diapazoną.

6. Pašalinkite komentarus iš failo

Kartais konfigūracijos failai įkeliami su komentarais. Nors tai tikrai naudinga, kartais gali būti naudinga rodyti tik konfigūracijos direktyvas, jei norite jas visas peržiūrėti iš karto.

Norėdami pašalinti tuščias eilutes arba tas, kurios prasideda raide #, iš Apache konfigūracijos failo, atlikite toliau nurodytus veiksmus.

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

Po taško ženklo yra skaičiaus ženklas (^#), kuris nurodo eilutės pradžią, o ^$ reiškia tuščias eilutes. Vertikalios juostos rodo logines operacijas, o atgalinis pasvirasis brūkšnys naudojamas norint išvengti vertikalių juostų.

Šiuo konkrečiu atveju Apache konfigūracijos faile yra eilučių su #, kurios nėra kai kurių eilučių pradžioje, todėl *# taip pat naudojamas joms pašalinti.

7. Pakeiskite didžiųjų ir mažųjų raidžių neskiriantį žodį faile

Norėdami pakeisti žodį, prasidedantį didžiosiomis arba mažosiomis raidėmis, kitu žodžiu, taip pat galime naudoti sed. Norėdami iliustruoti, pakeiskime žodį zip arba Zip į rar faile tecmint.txt:

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

8. Konkrečių įvykių radimas žurnalo faile

Kitas sed panaudojimas – spausdinamos eilutės iš failo, atitinkančios nurodytą reguliarųjį posakį. Pavyzdžiui, mums gali būti įdomu peržiūrėti autorizacijos ir autentifikavimo veiklą, vykusią liepos 2 d., kaip nurodyta /var /log/secure prisijunkite prie CentOS serverio.

Šiuo atveju šablonas, kurio reikia ieškoti, yra liepos 2 d. kiekvienos eilutės pradžioje:

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

9. Tarpų arba tuščių eilučių įterpimas į failą

Naudodami sed taip pat galime įterpti tarpus (tuščias eilutes) prie kiekvienos netuščios failo eilutės. Jei norite įterpti po vieną tuščią eilutę kas antroje paprastojo teksto failo LICENCIJA eilutėje, atlikite toliau nurodytus veiksmus.

sed G tecmint.txt

Norėdami įterpti dvi tuščias eilutes, atlikite šiuos veiksmus:

sed 'G;G' tecmint.txt

Jei norite pridėti daugiau tuščių eilučių, pridėkite didžiąją G raidę, atskirtą kabliataškiu. Toliau pateiktame paveikslėlyje iliustruojamas šiame patarime pateiktas pavyzdys:

Šis patarimas gali būti naudingas, jei norite patikrinti didelį konfigūracijos failą. Kas antrą eilutę įterpus tuščią vietą ir sumažinus išvestį, skaitymo patirtis bus patogesnė.

10. ^M pašalinimas iš failo

Programa dos2unix konvertuoja paprasto teksto failus iš „Windows“/„Mac“ formatavimo į „Unix“/„Linux“, pašalindama paslėptus naujos eilutės simbolius, įterptus kai kurių tose platformose naudojamų teksto redaktorių. Jei jis neįdiegtas jūsų „Linux“ sistemoje, galite imituoti jo funkcijas naudodami sed, užuot jį įdiegę.

Kairėje esančiame paveikslėlyje matome kelis DOS naujos eilutės simbolius (^M), kurie vėliau buvo pašalinti su:

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

Atminkite, kad parinktis -i rodo redagavimą vietoje. Tada pakeitimai nebus grąžinti į ekraną, bet bus išsaugoti faile.

Pastaba: galite įterpti DOS naujos eilutės simbolius redaguodami failą Vim redaktoriuje naudodami Ctrl+V ir Ctrl+M.

11. Sukurkite atsarginę kopiją naudodami komandą Sed

Ankstesniame patarime naudojome sed, kad pakeistume failą, bet neišsaugojome pradinio failo. Kartais naudinga tik tam atvejui išsaugoti atsarginę originalaus failo kopiją.

Norėdami tai padaryti, nurodykite priesagą po parinkties -i (vienose kabutėse), kuri bus naudojama pervardyti pradinį failą.

Šiame pavyzdyje mes pakeisime visus šis arba Šis atvejus (nepaisydami didžiųjų ir mažųjų raidžių) į mano failas.txt ir išsaugosime pradinį failą kaip mano failas.txt.orig.

Galiausiai, norėdami nustatyti skirtumus tarp abiejų failų, naudosime diff įrankį:

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

12. Žodžių porų perjungimas faile

Tarkime, kad turite failą, kuriame yra visi vardai formatu Vardas, Pavardė. Norėdami tinkamai apdoroti failą, galbūt norėsite perjungti Pavardę ir Vardą.

Su sed galime tai padaryti gana lengvai:

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

Aukščiau esančiame paveikslėlyje matome, kad skliausteliuose, kurie yra specialieji simboliai, reikia išbraukti, kaip ir skaičiai 1 ir 2.

Šie skaičiai žymi paryškintas reguliariąsias išraiškas (kurios turi būti pateiktos skliausteliuose):

  • 1 reiškia kiekvienos eilutės pradžią iki kablelio.
  • 2 yra vietos žymeklis viskam, kas yra tiesiai nuo kablelio iki eilutės pabaigos.

Norima išvestis nurodoma formatu Antras stulpelis (Pavardė) + kablelis + tarpas + Pirmasis stulpelis (Vardas). Nedvejodami pakeiskite jį į tai, ko norite.

13. Žodžių keitimas tik tuo atveju, jei rastas atskiras atitikmuo

Kartais pakeisti visus duoto žodžio atvejus arba keletą atsitiktinių žodžių mums nėra būtent tai, ko mums reikia. Galbūt turime atlikti pakeitimą, jei randame atskirą atitikmenį.

Pavyzdžiui, galime norėti pakeisti pradėti į stop, tik jei žodis paslaugos yra toje pačioje eilutėje. Pagal šį scenarijų, štai kas nutiks:

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

Pirmoje eilutėje pradžia nebus pakeista į stop, nes žodis paslaugos toje eilutėje nerodomas, priešingai nei antroje eilutėje.

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

14. Du ar daugiau keitimų atlikimas vienu metu

Galite sujungti du ar daugiau pakeitimų vienoje komandoje sed. Pakeiskime žodžius ir eilutę mano failas.txt į This ir verse.

Atkreipkite dėmesį, kaip tai galima padaryti naudojant įprastą sed pakeitimo komandą, po kurios rašomas kabliataškis ir antra pakeitimo komanda:

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

Šis patarimas iliustruotas toliau pateiktame paveikslėlyje:

15. Sed ir kitų komandų derinimas

Žinoma, sed galima derinti su kitomis Linux komandomis, kad būtų sukurtos galingesnės komandos. Pavyzdžiui, naudokime pavyzdį, pateiktą 4 PATARIMAS, ir iš komandos ip route išveskime savo IP adresą.

Pradėsime spausdindami tik eilutę, kurioje yra žodis src. Tada paversime kelias erdves į vieną. Galiausiai iškirpsime 9-ąjį lauką (vieną tarpą laikome lauko skyrikliu), kuriame yra IP adresas:

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

Toliau pateiktame paveikslėlyje parodytas kiekvienas aukščiau pateiktos komandos veiksmas:

Santrauka

Šiame vadove pasidalinome 15 patarimų ir gudrybių, kurie padės jums atlikti kasdienes sistemos administravimo užduotis. Ar yra kokių nors kitų patarimų, kuriuos naudojate reguliariai ir norėtumėte pasidalinti su mumis bei likusia bendruomenės dalimi?

Jei taip, nedvejodami praneškite mums naudodami toliau pateiktą komentarų formą. Taip pat laukiami klausimai ir komentarai – laukiame jūsų!