15 Sed komandnih savjeta za zadatke administracije sistema Linux


Svaki sistem administrator mora da se bavi obični tekstualnim fajlovima na dnevnoj bazi. Znati kako pregledati određene odjeljke, kako zamijeniti riječi i kako filtrirati sadržaj iz tih datoteka su vještine koje morate imati pri ruci bez potrebe za pretraživanjem na Googleu.

U ovom članku ćemo pregledati sed, dobro poznati uređivač streamova, i podijeliti 15 savjeta kako ga koristiti za postizanje ciljeva spomenutih ranije, i više.

Šta je Sed komanda?

Naredba 'sed', skraćenica za stream editor, je svestran i moćan alat za manipulaciju tekstom koji radi na tekstualnim tokovima, omogućavajući korisnicima da izvode različite operacije nad podacima, kao što su pretraživanje, zamjena, umetanje i izbrisati. 'Sed' koristi regularne izraze za definiranje obrazaca za manipulaciju tekstom, a može se koristiti za zadatke skupnog uređivanja i obrade teksta u skriptama.

Jedna od njegovih značajnih karakteristika je uređivanje na mjestu, gdje može direktno modificirati datoteke ili kreirati rezervne kopije dok pravi izmjene. 'Sed' je suštinski alat za sistemske administratore, programere i sve koji se bave zadacima transformacije teksta i manipulacije podacima u komandnoj liniji.

Slijede neke uobičajene „sed“ naredbe s primjerima:

1. Pregledanje raspona linija datoteke

Alati kao što su glava i rep omogućavaju nam da vidimo dno ili vrh datoteke. Šta ako trebamo vidjeti dio u sredini? Sljedeći sed u jednom redu će vratiti redove 5 do 10 iz tecmint.txt:

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

2. Pregledanje cijele datoteke osim određenog raspona

S druge strane, moguće je da želite ispisati cijelu datoteku osim određenog raspona. Da izuzmete redove 20 do 35 iz tecmint.txt, uradite:

sed '20,35d' myfile.txt

3. Gledanje neuzastopnih linija i raspona

Moguće je da ste zainteresirani za skup neuzastopnih linija ili za više od jednog raspona. Prikažimo redove 5-7 i 10-13 iz tecmint.txt:

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

Kao što vidite, opcija -e nam omogućava da izvršimo datu akciju (u ovom slučaju, ispis linija) za svaki opseg.

4. Zamjena riječi ili nizova u datoteci

Da zamijenite svaku instancu riječi verzija sa priča u tecmint.txt, uradite:

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

Osim toga, možda ćete htjeti razmotriti korištenje gi umjesto g kako biste zanemarili velika i mala slova:

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

Da zamijenimo više praznih mjesta jednim razmakom, koristit ćemo izlaz naredbe ip route show s cjevovodom:

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

Uporedite izlaz ip route show sa i bez cjevovoda:

5. Zamjena riječi ili nizova unutar raspona

Ako ste zainteresirani za zamjenu riječi samo unutar raspona linija (na primjer, 30 do 40), možete učiniti:

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

Naravno, možete označiti jedan red kroz odgovarajući broj umjesto raspona.

6. Uklonite komentare iz datoteke

Ponekad se konfiguracijski fajlovi učitavaju s komentarima. Iako je ovo svakako korisno, ponekad može biti korisno prikazati samo konfiguracijske direktive ako želite da ih sve pregledate na prvi pogled.

Da biste uklonili prazne redove ili one koji počinju s # iz Apache konfiguracijske datoteke, učinite:

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

Nakon znaka znaka znaka broja (^#) označava početak reda, dok ^$ predstavlja prazne redove. Vertikalne trake označavaju logičke operacije, dok se kosa crta unatrag koristi za izbjegavanje vertikalnih traka.

U ovom konkretnom slučaju, Apache konfiguracijska datoteka ima redove sa # koji nisu na početku nekih redova, tako da se *# koristi i za njihovo uklanjanje.

7. Zamijenite riječ koja ne razlikuje velika i mala slova u datoteci

Da zamijenimo riječ koja počinje velikim ili malim slovima drugom riječju, također možemo koristiti sed. Za ilustraciju, zamijenimo riječ zip ili Zip sa rar u tecmint.txt:

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

8. Pronalaženje određenih događaja u log datoteci

Druga upotreba sed sastoji se u štampanju linija iz datoteke koje odgovaraju datom regularnom izrazu. Na primjer, mogli bismo biti zainteresirani za pregled aktivnosti autorizacije i autentifikacije koje su se dogodile 2. jula, prema /var /log/secure prijavite se na CentOS server.

U ovom slučaju, obrazac za traženje je 2. jul na početku svakog reda:

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

9. Umetanje razmaka ili praznih linija u datoteku

Sa sed, također možemo umetnuti razmake (prazne redove) za svaki neprazan red u datoteci. Da biste umetnuli jedan prazan red u svaki drugi red u LICENCIJU, datoteku običnog teksta, uradite:

sed G tecmint.txt

Da biste umetnuli dva prazna reda, uradite:

sed 'G;G' tecmint.txt

Dodajte veliko G odvojeno tačkom i zarezom ako želite dodati još praznih redova. Sljedeća slika ilustruje primjer naveden u ovom savjetu:

Ovaj savjet može biti od koristi ako želite pregledati veliku konfiguracijsku datoteku. Umetanje praznog prostora u svaki drugi red i postavljanje izlaza na manje rezultiraće ugodnijim iskustvom čitanja.

10. Uklanjanje ^M u datoteci

Program dos2unix konvertuje obične tekstualne datoteke iz Windows/Mac formatiranja u Unix/Linux, uklanjajući skrivene znakove novog reda umetnute od strane nekih uređivača teksta koji se koriste na tim platformama. Ako nije instaliran u vašem Linux sistemu, možete oponašati njegovu funkcionalnost pomoću sed umjesto da ga instalirate.

Na slici lijevo možemo vidjeti nekoliko DOS znakova za novi red (^M), koji su kasnije uklonjeni sa:

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

Imajte na umu da opcija -i označava uređivanje na mjestu. Tada promjene neće biti vraćene na ekran već će biti sačuvane u datoteci.

Napomena: Možete umetnuti DOS znakove za novi red dok uređujete datoteku u Vim editoru pomoću Ctrl+V i Ctrl+M.

11. Kreirajte datoteku sigurnosne kopije pomoću naredbe Sed

U prethodnom savjetu koristili smo sed da modificiramo fajl, ali nismo sačuvali originalni fajl. Ponekad je dobra ideja za svaki slučaj sačuvati rezervnu kopiju originalne datoteke.

Da biste to učinili, navedite sufiks nakon opcije -i (unutar jednostrukih navodnika) koji će se koristiti za preimenovanje originalne datoteke.

U sljedećem primjeru, zamijenit ćemo sve instance ovo ili Ovo (zanemarujući velika i mala slova) s onim u myfile.txt i sačuvat ćemo originalni fajl kao myfile.txt.orig.

Konačno, koristićemo diff uslužni program da identifikujemo razlike između oba fajla:

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

12. Zamjena parova riječi u datoteci

Pretpostavimo da imate datoteku koja sadrži puna imena u formatu Ime, Prezime. Za adekvatnu obradu datoteke, možda ćete htjeti promijeniti Prezime i Ime.

To možemo učiniti sa sed prilično lako:

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

Na gornjoj slici možemo vidjeti da zagrade, kao posebni znakovi, moraju biti izostavljeni, kao i brojevi 1 i 2.

Ovi brojevi predstavljaju istaknute regularne izraze (koji se moraju pojaviti unutar zagrada):

  • 1 predstavlja početak svakog reda do zareza.
  • 2 je čuvar mjesta za sve što je desno od zareza na kraju reda.

Željeni izlaz je naznačen u formatu Druga kolona (Prezime) + zarez + razmak + Prva kolona (Ime). Slobodno ga promijenite u šta god želite.

13. Zamjena riječi samo ako se pronađe odvojeno podudaranje

Ponekad zamjena svih instanci date riječi, ili nekoliko nasumičnih nekoliko, nije upravo ono što nam treba. Možda trebamo izvršiti zamjenu ako se pronađe zasebno podudaranje.

Na primjer, možda ćemo htjeti zamijeniti start sa stop samo ako se riječ usluge nalazi u istom redu. U tom scenariju, evo šta će se dogoditi:

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

U prvom redu, start neće biti zamijenjen sa stop jer se riječ usluge ne pojavljuje u tom redu, za razliku od drugog reda.

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

14. Izvođenje dvije ili više zamjena odjednom

Možete kombinirati dvije ili više zamjena u jednoj sed komandi. Zamijenimo riječi koje i red u myfile.txt sa Ovo i stih, respektivno.

Obratite pažnju na to kako se to može učiniti korištenjem obične naredbe za zamjenu sed nakon koje slijedi tačka i zarez i druga naredba zamjene:

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

Ovaj savjet je ilustrovan na sljedećoj slici:

15. Kombiniranje Sed i drugih naredbi

Naravno, sed se može kombinovati sa drugim Linux komandama kako bi se kreirale moćnije komande. Na primjer, koristimo primjer dat u SAVJETU #4 i izdvojimo našu IP adresu iz izlaza naredbe ip route.

Počećemo tako što ćemo ispisati samo red u kojem se nalazi riječ src. Zatim ćemo konvertovati više razmaka u jedan. Na kraju ćemo izrezati 9. polje (s obzirom na jedan razmak kao razdjelnik polja), gdje se nalazi IP adresa:

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

Slika ispod ilustruje svaki korak gornje naredbe:

Sažetak

U ovom vodiču podijelili smo 15 sed savjeta i trikova koji će vam pomoći u svakodnevnim zadacima administracije sistema. Postoji li još neki savjet koji redovno koristite i koji biste željeli podijeliti s nama i ostatkom zajednice?

Ako je tako, slobodno nas obavijestite koristeći formu za komentare ispod. Pitanja i komentari su također dobrodošli – radujemo se Vašem odgovoru!