15 sfaturi și trucuri utile pentru comenzile sed pentru sarcini zilnice de administrare a sistemului Linux


Fiecare administrator de sistem trebuie să se ocupe zilnic de fișiere text simplu. A ști cum să vizualizați anumite secțiuni, cum să înlocuiți cuvinte și cum să filtrați conținutul din acele fișiere sunt abilități pe care trebuie să le aveți la îndemână fără a fi nevoie să faceți o căutare pe Google.

În acest articol vom trece în revistă sed, binecunoscutul editor de flux, și vom împărtăși 15 sfaturi pentru a-l folosi pentru a îndeplini obiectivele menționate mai devreme și multe altele.

1. Vizualizarea unei game de linii dintr-un document

Instrumente precum capul și coada ne permit să vedem partea de jos sau partea de sus a fișierului. Ce se întâmplă dacă trebuie să vedem o secțiune din mijloc? Următoarea linie sedică va returna liniile 5 până la 10 din myfile.txt:

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

2. Vizualizarea întregului fișier, cu excepția unui interval dat

Pe de altă parte, este posibil să doriți să imprimați întregul fișier, cu excepția unui anumit interval. Pentru a exclude liniile 20 până la 35 din myfile.txt, procedați:

# sed '20,35d' myfile.txt

3. Vizualizarea liniilor și intervalelor neconsecutive

Este posibil să fiți interesat de un set de linii neconsecutive sau de mai mult de un interval. Să afișăm liniile 5-7 și 10-13 din myfile.txt:

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

După cum puteți vedea, opțiunea -e ne permite să executăm o anumită acțiune (în acest caz, tipăriți linii) pentru fiecare interval.

4. Înlocuirea cuvintelor sau a caracterelor (înlocuirea de bază)

Pentru a înlocui fiecare instanță a cuvântului versiune cu poveste în fișierul meu.txt, faceți:

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

În plus, vă recomandăm să utilizați gi în loc de g pentru a ignora majusculele și minusculele:

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

Pentru a înlocui mai multe spații goale cu un singur spațiu, vom folosi rezultatul ip route show și o conductă:

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

Comparați rezultatul ip route show cu și fără conductă:

5. Înlocuirea cuvintelor sau caracterelor într-un interval

Dacă sunteți interesat să înlocuiți cuvinte doar într-un interval de rând (de la 30 la 40, de exemplu), puteți face:

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

Desigur, puteți indica o singură linie prin numărul corespunzător în loc de un interval.

6. Utilizarea expresiilor regulate (substituție avansată) – I

Uneori fișierele de configurare sunt încărcate cu comentarii. Deși acest lucru este cu siguranță util, poate fi util să afișați uneori numai directivele de configurare dacă doriți să le vizualizați pe toate dintr-o privire.

Pentru a elimina liniile goale sau cele care încep cu # din fișierul de configurare Apache, faceți:

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

Semnul caret urmat de semnul numeric (^#) indică începutul unei linii, în timp ce ^$ reprezintă linii goale. Barele verticale indică operațiuni booleene, în timp ce barele verticale sunt folosite pentru a scăpa de barele verticale.

În acest caz particular, fișierul de configurare Apache are linii cu #’s nu la începutul unor linii, așa că *# este folosit și pentru a le elimina.

7. Utilizarea expresiilor regulate (substituție avansată) – II

Pentru a înlocui un cuvânt care începe cu litere mari sau mici cu un alt cuvânt, putem folosi și sed. Pentru a ilustra, să înlocuim cuvântul zip sau Zip cu rar în myfile.txt:

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

8. Vizualizarea liniilor care conțin un model dat

O altă utilizare a sed constă în imprimarea liniilor dintr-un fișier care se potrivesc cu o anumită expresie regulată. De exemplu, este posibil să fim interesați să vedem activitățile de autorizare și autentificare care au avut loc pe 2 iulie, conform /var/log/secure log într-un Server CentOS 7.

În acest caz, modelul de căutat este 2 iulie la începutul fiecărui rând:

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

9. Inserarea spatiilor in fisiere

Cu sed, putem introduce și spații (linii goale) pentru fiecare linie negoală dintr-un fișier. Pentru a insera un rând necompletat la fiecare altă linie în LICENȚĂ, un fișier text simplu, faceți:

# sed G myfile.txt

Pentru a insera două linii goale, procedați:

# sed 'G;G' myfile.txt

Adăugați un G majuscul separat de punct și virgulă dacă doriți să adăugați mai multe linii goale. Următoarea imagine ilustrează exemplul prezentat în acest sfat:

Acest sfat poate fi util dacă doriți să inspectați un fișier de configurare mare. Introducerea unui spațiu liber la fiecare linie și direcționarea ieșirii la mai puțin va avea ca rezultat o experiență de lectură mai prietenoasă.

10. Emularea dos2unix cu editare inline

Programul dos2unix convertește fișierele text simplu din formatarea Windows/Mac în Unix/Linux, eliminând caracterele de tip newline ascunse inserate de unii editori de text utilizați în acele platforme. Dacă nu este instalat în sistemul dvs. Linux, puteți imita funcționalitatea acestuia cu sed în loc să îl instalați.

În imaginea din stânga putem vedea mai multe caractere DOS newline (^M), care au fost ulterior eliminate cu:

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

Vă rugăm să rețineți că opțiunea -i indică editarea pe loc. Apoi modificările nu vor fi returnate pe ecran, ci vor fi salvate în fișier.

Notă: puteți insera caractere de linie nouă DOS în timp ce editați un fișier în editorul vim cu Ctrl+V și Ctrl+M.

11. Editarea in loc și copierea de rezervă a fișierului original

În sfatul anterior, am folosit sed pentru a modifica un fișier, dar nu am salvat fișierul original. Uneori este o idee bună să salvați o copie de rezervă a fișierului original pentru orice eventualitate.

Pentru a face acest lucru, indicați un sufix după opțiunea -i (între ghilimele simple) pentru a fi folosit pentru a redenumi fișierul original.

În exemplul următor, vom înlocui toate cazurile de acest sau Acest (ignorând majusculele) cu cele din fișierul meu.txt și vom salva fișierul original ca myfile.txt.orig.

În cele din urmă, vom folosi utilitarul diff pentru a identifica diferențele dintre ambele fișiere:

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

12. Schimbarea perechilor de cuvinte

Să presupunem că aveți un fișier care conține nume complete în formatul Prenumele, Nume. Pentru a procesa în mod adecvat fișierul, vă recomandăm să comutați Nume și Prenumele.

Putem face asta cu sed destul de ușor:

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

În imaginea de mai sus putem observa că parantezele, fiind caractere speciale, trebuie să fie eliminate, la fel ca și numerele 1 și 2.

Aceste numere reprezintă expresiile regulate evidențiate (care trebuie să apară în paranteze):

  1. 1 reprezintă începutul fiecărui rând până la virgulă.
  2. 2 este un substituent pentru tot ce se află în dreptul virgulei până la sfârșitul rândului.

Rezultatul dorit este indicat în formatul SecondColumn (Nume) + virgulă + spațiu + FirstColumn (Prenumele). Simțiți-vă liber să îl schimbați în ceea ce doriți.

13. Înlocuirea cuvintelor numai dacă se găsește o potrivire separată

Uneori, înlocuirea tuturor cazurilor unui anumit cuvânt, sau a câtorva aleatorii, nu este exact ceea ce avem nevoie. Poate că trebuie să efectuăm înlocuirea dacă se găsește o potrivire separată.

De exemplu, este posibil să dorim să înlocuim start cu stop numai dacă cuvântul servicii este găsit în aceeași linie. În acest scenariu, iată ce se va întâmpla:

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

În prima linie, start nu va fi înlocuit cu stop, deoarece cuvântul servicii nu apare în acea linie, spre deosebire de a doua linie.

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

14. Efectuarea a două sau mai multe înlocuiri deodată

Puteți combina două sau mai multe înlocuiri cu o singură comandă sed. Să înlocuim cuvintele that și rândul din myfile.txt cu This și, respectiv, verset.

Rețineți cum se poate face acest lucru utilizând o comandă obișnuită de înlocuire sed urmată de un punct și virgulă și o a doua comandă de înlocuire:

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

Acest sfat este ilustrat în următoarea imagine:

15. Combinarea sed și a altor comenzi

Desigur, sed poate fi combinat cu alte instrumente pentru a crea comenzi mai puternice. De exemplu, să folosim exemplul dat în SFAT #4 și să extragem adresa noastră IP din rezultatul comenzii ip route.

Vom începe prin a tipări doar linia în care se află cuvântul src. Apoi vom converti mai multe spații într-unul singur. În cele din urmă, vom tăia câmpul al 9-lea (luând în considerare un singur spațiu ca separator de câmp), care este locul unde este adresa IP:

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

Imaginea de mai jos ilustrează fiecare pas al comenzii de mai sus:

rezumat

În acest ghid, am împărtășit 15 sfaturi și trucuri sed pentru a vă ajuta cu sarcinile zilnice de administrare a sistemului. Există vreun alt sfat pe care îl folosiți în mod regulat și pe care ați dori să-l împărtășiți cu noi și cu restul comunității?

Dacă da, nu ezitați să ne anunțați folosind formularul de comentarii de mai jos. Întrebările și comentariile sunt, de asemenea, binevenite - așteptăm cu nerăbdare să auzim de la tine!