Fiecare administrator de sistem are de a face cu fișiere text simplu pe o bază de zi cu zi. Știind cum să vizualizați anumite secțiuni, cum să înlocuiți cuvintele ș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 Google.,
În acest articol vom analiza sed, bine-cunoscut stream editor, și a cotei de 15 sfaturi pentru a utiliza în scopul de a realiza obiectivele menționate anterior, și mai mult.
vizualizarea unei game de linii dintr-un document
instrumente precum cap și coadă ne permit să vizualizăm partea de jos sau partea de sus a unui fișier. Ce se întâmplă dacă avem nevoie pentru a vedea o secțiune în mijloc? Următorul sed one-liner va returna liniile 5 prin 10 din myfile.,Txt:
# sed -n '5,10p' myfile.txt
vizualizarea întregului fișier, cu excepția unui anumit interval
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, do:
# sed '20,35d' myfile.txt
vizualizarea liniilor și intervalelor non-consecutive
este posibil să vă intereseze un set de linii non-consecutive sau în mai multe intervale. 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, -e
opțiune ne permite de a executa o anumită acțiune (în acest caz, imprimarea liniilor) pentru fiecare interval.
Înlocuirea unor cuvinte sau de caractere (de bază substituție)
Pentru a înlocui fiecare instanță de cuvântul version
cu story
în myfile.,de ip route show
și o conductă:
# ip route show | sed 's/ */ /g'
Compara producția de ip route show
cu și fără conductei:
Înlocuirea unor cuvinte sau caractere în interiorul unui interval
Dacă sunteți interesat în înlocuirea unor cuvinte numai într-o linie de interval (intre 30 si 40 de ani, de exemplu), poți să faci:
# sed '30,40 s/version/story/g' myfile.txt
desigur, puteți indica un singur rând prin numărul corespunzător în loc de o gama.,
folosind expresii 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 doar directivele de configurare uneori 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:
# sed '/^#\|^$\| *#/d' httpd.conf
caret semn urmat de numărul de semn (^#)
indică începutul unei linii, întrucât ^$
reprezintă linii goale., Barele verticale indică operații booleene, în timp ce slash-ul înapoi este utilizat pentru a scăpa de barele verticale.
În acest caz, fișierul de configurare Apache are linii cu #’s
nu de la început a unor linii, deci *#
este folosit pentru a elimina cei la fel de bine.
folosind expresii regulate – substituție avansată) – II
pentru a înlocui un cuvânt care începe cu majuscule sau minuscule 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/ip/rar/g' myfile.txt
nu rata: Utilizarea Awk cu Expresii Regulate pentru a Filtra Text în Fișiere
Vizualizare linii conțin cu un anumit model
o Altă utilizare a sed constă în imprimarea linii dintr-un fișier care se potrivesc cu o anumită expresie regulată. De exemplu, am putea fi interesați să vizualizăm activitățile de autorizare și autentificare care au avut loc pe 2 iulie, conform Jurnalului /var/log/secure într-un server CentOS 7.,
În acest caz, modelul pentru a căuta este Jul 2, la fiecare început de linie:
# sed -n '/^Jul 1/ p' /var/log/secure
Inserarea de spații în fișiere
Cu sed, putem introduce, de asemenea, spații (rânduri goale) pentru fiecare non-linie goală într-un fișier., Pentru a introduce o linie goală, fiecare rând în LICENȚĂ, un fișier text simplu, fac:
# sed G myfile.txt
Pentru a introduce două linii goale, face:
# sed 'G;G' myfile.txt
Adăugați un majuscule G separate prin punct și virgulă dacă doriți să adăugați mai multe linii goale. Imaginea următoare ilustrează exemplul prezentat în acest sfat:
Acest sfat poate veni la îndemână, dacă doriți să verificați un mare fișier de configurare., Introducerea unui spațiu gol la fiecare altă linie și conducte de ieșire la mai puțin va duce la o experiență de lectură mai prietenos.
Emularea dos2unix cu editare inline
dos2unix programul convertește fișiere text simplu din Windows/Mac formatare pentru Unix/Linux, eliminarea ascunse linie nouă de caractere introdus de unele editoare de text folosite în aceste platforme. Linux, puteți imita funcționalitatea acestuia cu sed în loc să îl instalați.,
În imaginea din stânga se poate vedea de mai multe DOS caractere newline (^M)
, care ulterior au fost eliminate cu:
# sed -i 's/\r//' myfile.txt
vă Rugăm să rețineți că -i
opțiunea de a indica în loc de editare. Apoi, modificările nu vor fi returnate pe ecran, ci vor fi salvate în fișier.,
Notă: puteți introduce DOS newline caractere în timp ce editați un fișier în editorul vim cu Ctrl+V
și Ctrl+M
.
editare și copiere de rezervă a fișierului original
în vârful 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 doar pentru caz.
Pentru a face asta, indica un sufix următoarele -i
opțiune (în ghilimele simple) pentru a fi utilizate pentru a redenumi fișierul original.,
în exemplul următor vom înlocui toate instanțele de acest lucru sau acest lucru (ignorarea caz) cu care în myfile.txt, și vom salva fișierul original ca myfile.txt.orig.
în cele din Urmă, vom folosi dif de utilitate pentru a identifica diferențele dintre cele două fișiere:
# sed -i'.orig' 's/this/that/gi' myfile.txt
Comutare perechi de cuvinte
Să presupunem că aveți un fișier care conține numele complet, în format nume, prenume., Pentru a procesa în mod adecvat fișierul, poate doriți să comutați numele și prenumele.
putem face asta cu sed destul de ușor:
# sed 's/^\(.*\),\(.*\)$/\, /g' names.txt
În imaginea de mai sus putem vedea că paranteze, fiind caractere speciale, trebuie să fi scăpat, la fel ca numerele 1 și 2.
aceste numere reprezintă expresiile regulate evidențiate (care trebuie să apară în paranteze):
- 1 reprezintă începutul fiecărei linii până la virgulă.,
- 2 este un substituent pentru tot ceea ce este drept de virgulă până la sfârșitul liniei.
ieșirea dorită este indicată în format SecondColumn (prenume) + virgulă + spațiu + FirstColumn (prenume). Simțiți-vă liber să-l schimbați în orice doriți.
înlocuirea cuvintelor numai dacă se găsește o potrivire separată
uneori înlocuirea tuturor instanțelor unui cuvânt dat 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ă serviciile word se găsesc î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 word services nu apare în acea linie, spre deosebire de a doua linie.,
# sed '/services/ s/start/stop/g' msg.txt
Efectuarea a două sau mai multe substituții la o dată
puteți combina două sau mai multe substituții un singur sed comanda. Să înlocuim cuvintele care și linia din myfile.txt cu acest verset, respectiv.,
Notă cum acest lucru poate fi realizat prin utilizarea unui ordinare sed substituire comandă urmat de o virgulă și un al doilea substituire comandă:
# sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt
Acest sfat este ilustrat în imaginea următoare:
Combinarea sed și alte comenzi
desigur, sed pot fi combinate cu alte instrumente, în scopul de a crea mai puternic de comenzi., De exemplu, să folosim exemplul dat în vârful #4 și să extragem adresa IP din ieșirea comenzii ip route
.
vom începe prin imprimarea numai a liniei în care este cuvântul src
. Apoi vom converti mai multe spații într-unul singur., În cele din urmă, vom tăia 9 domeniu (având în vedere un singur spațiu ca separator de câmp), care este în cazul în care adresa IP este:
# ip route show | sed -n '/src/p' | sed -e 's/ */ /g' | cut -d' ' -f9
imaginea De mai jos ilustrează fiecare pas din comanda de mai sus:
Sumar
În acest ghid ne-am împărtășit 15 sed sfaturi și trucuri pentru a vă ajuta cu dvs. de zi cu zi sarcini de administrare a sistemului. Există vreun alt sfat pe care îl utilizați în mod regulat și doriți să îl împărtășiți cu noi și cu restul comunității?,