15 savjeta za naredbu Sed za zadatke administracije sustava Linux


Svaki administrator sustava svakodnevno ima posla s običnim tekstualnim datotekama. Znati kako pregledati određene odjeljke, kako zamijeniti riječi i kako filtrirati sadržaj iz tih datoteka vještine su koje morate imati pri ruci bez potrebe za pretraživanjem na Googleu.

U ovom ćemo članku pregledati sed, dobro poznati uređivač streamova, i podijeliti 15 savjeta za njegovu upotrebu u svrhu postizanja ranije spomenutih ciljeva i više.

Što je Sed naredba?

Naredba 'sed', skraćenica za uređivač toka, je svestran i moćan alat za manipulaciju tekstom koji radi na tekstualnim tokovima, omogućujući korisnicima izvođenje raznih operacija na podacima, kao što su pretraživanje, zamjena, umetanje i izbrisati. 'Sed' koristi regularne izraze za definiranje uzoraka za manipulaciju tekstom, a može se koristiti za zadatke skupnog uređivanja i obradu teksta u skriptama.

Jedna od njegovih značajnih značajki je uređivanje na licu mjesta, gdje može izravno mijenjati datoteke ili stvarati sigurnosne kopije dok vrši izmjene. ‘Sed’ bitan je alat za administratore sustava, programere i sve koji se bave zadacima transformacije teksta i manipulacije podacima u naredbenom retku.

Slijede neke uobičajene naredbe ‘sed’ s primjerima:

1. Pregled raspona redaka datoteke

Alati kao što su glava i rep omogućuju nam da vidimo dno ili vrh datoteke. Što ako trebamo vidjeti odjeljak u sredini? Sljedeći sed jednolinijski će vratiti retke 5 do 10 iz tecmint.txt:

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

2. Pregled cijele datoteke osim zadanog raspona

S druge strane, moguće je da želite ispisati cijelu datoteku osim određenog raspona. Da biste isključili retke 20 do 35 iz tecmint.txt, učinite sljedeće:

sed '20,35d' myfile.txt

3. Pregled neuzastopnih linija i raspona

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

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

Kao što vidite, opcija -e omogućuje nam da izvršimo zadanu radnju (u ovom slučaju, ispis redaka) za svaki raspon.

4. Zamjena riječi ili nizova u datoteci

Za zamjenu svake instance riječi verzija sa priča u tecmint.txt, učinite sljedeće:

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

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

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

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

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

Usporedite 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 redaka (30 do 40, na primjer), možete učiniti:

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

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

6. Uklonite komentare iz datoteke

Ponekad se konfiguracijske datoteke učitavaju s komentarima. Iako je ovo svakako korisno, ponekad može biti korisno prikazati samo konfiguracijske upute ako ih želite sve vidjeti na prvi pogled.

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

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

Iza znaka za umetanje slijedi znak broja (^#) koji označava početak retka, dok ^$ predstavlja prazne retke. Okomite crte označavaju Booleove operacije, dok se kosa crta unatrag koristi za izbjegavanje okomitih crta.

U ovom konkretnom slučaju, konfiguracijska datoteka Apachea ima retke s # koji nisu na početku nekih redaka, pa se *# također koristi za njihovo uklanjanje.

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

Za zamjenu riječi koja počinje velikim ili malim slovom 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 ispisu redaka iz datoteke koji odgovaraju zadanom regularnom izrazu. Na primjer, mogli bismo biti zainteresirani za pregled aktivnosti autorizacije i autentifikacije koje su se dogodile 2. srpnja, prema /var /log/secure prijavite se na CentOS poslužitelj.

U ovom slučaju, uzorak za traženje je 2. srpnja na početku svakog retka:

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

9. Umetanje razmaka ili praznih redaka u datoteku

Pomoću sed također možemo umetnuti razmake (prazne retke) za svaki redak koji nije prazan u datoteci. Da biste u LICENSE, datoteku običnog teksta, umetnuli jedan prazan redak u svaki drugi redak, učinite sljedeće:

sed G tecmint.txt

Da biste umetnuli dva prazna retka, učinite sljedeće:

sed 'G;G' tecmint.txt

Dodajte veliko slovo G odvojeno točkom i zarezom ako želite dodati više praznih redaka. Sljedeća slika ilustrira primjer naveden u ovom savjetu:

Ovaj savjet može biti koristan ako želite pregledati veliku konfiguracijsku datoteku. Umetanje praznog prostora u svaki drugi redak i usmjeravanje izlaza na manje rezultirat će ugodnijim iskustvom čitanja.

10. Uklanjanje ^M u datoteci

Program dos2unix pretvara datoteke običnog teksta iz Windows/Mac formata u Unix/Linux, uklanjajući skrivene znakove za novi red koje su umetnuli neki uređivači teksta koji se koriste na tim platformama. Ako nije instaliran u vašem Linux sustavu, 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 s:

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

Imajte na umu da opcija -i označava uređivanje na mjestu. Tada se promjene neće vratiti na ekran, već će biti spremljene u datoteku.

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

11. Napravite datoteku sigurnosne kopije pomoću naredbe Sed

U prethodnom savjetu koristili smo sed za izmjenu datoteke, ali nismo spremili izvornu datoteku. Ponekad je dobra ideja spremiti sigurnosnu kopiju izvorne datoteke za svaki slučaj.

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

U sljedećem primjeru, zamijenit ćemo sve instance this ili This (zanemarujući velika i mala slova) onim u myfile.txt, i spremit ćemo izvornu datoteku kao myfile.txt.orig.

Konačno, koristit ćemo diff uslužni program za prepoznavanje razlika između obje datoteke:

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

12. Prebacivanje parova riječi u datoteci

Pretpostavimo da imate datoteku koja sadrži puna imena u formatu Ime, Prezime. Da biste adekvatno obradili datoteku, možda biste trebali zamijeniti Prezime i Ime.

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

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

Na gornjoj slici možemo vidjeti da se zagrade, budući da su posebni znakovi, moraju izbjeći, kao i brojevi 1 i 2.

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

  • 1 predstavlja početak svakog retka do zareza.
  • 2 je rezervirano mjesto za sve što je desno od zareza do kraja retka.

Željeni izlaz je naznačen u formatu Drugi stupac (Prezime) + zarez + razmak + Prvi stupac (Ime). Slobodno ga promijenite u što god želite.

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

Ponekad zamjena svih instanci date riječi, ili nekoliko slučajnih riječi, nije baš ono što nam treba. Možda ćemo morati izvršiti zamjenu ako se pronađe odvojeno podudaranje.

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

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

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

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 naredbi sed. Zamijenimo riječi that i line u myfile.txt s This odnosno stih.

Imajte na umu kako se to može učiniti korištenjem obične naredbe sed zamjene iza koje slijedi točka-zarez i druga naredba za zamjenu:

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

Ovaj savjet ilustriran je na sljedećoj slici:

15. Kombinacija Sed i drugih naredbi

Naravno, sed se može kombinirati s drugim Linux naredbama kako bi se stvorile snažnije naredbe. Na primjer, upotrijebimo primjer dat u SAVJETU #4 i izdvojimo našu IP adresu iz izlaza naredbe ip route.

Počet ćemo ispisivanjem samo retka u kojem se nalazi riječ src. Tada ćemo pretvoriti više prostora u jedan. Na kraju ćemo izrezati 9. polje (uzimajući u obzir jedan razmak kao razdjelnik polja), gdje je IP adresa:

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

Slika u nastavku ilustrira svaki korak gornje naredbe:

Sažetak

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

Ako je tako, slobodno nam javite putem obrasca za komentare u nastavku. Pitanja i komentari su također dobrodošli – veselimo se vašem odgovoru!