Natrag na blog

Pregled Sed stream editora za manipulaciju tekstom u Linuxu

Pregled Sed stream editora za manipulaciju tekstom u Linuxu

Naredba sed je skraćenica za stream editor. To je iznimno popularan alat na Linux/UNIX sustavima. Sed sam po sebi nije uređivač teksta. Međutim, može izvoditi različite modifikacije za manipulaciju zadanim tekstom. Unos teksta šalje se kao tok. Sed zatim izvodi zadane radnje na toku. Ovaj vodič daje pregled sed naredbe i kako njome upravljati kako biste uspješno manipulirali tekstom u Linuxu.

Sed u Linuxu

Ulazni tok za sed može dolaziti iz tekstualne datoteke ili iz STDIN-a (standardnog ulaza). Možemo raditi s izlazom druge naredbe ili izravno s tekstualnom datotekom. Alat sed dolazi unaprijed instaliran na svim Linux distribucijama.

Pregled upotrebe naredbe Sed

Naredba sed slijedi sljedeću strukturu:

Za potrebe demonstracije, preuzeli smo tekstualnu verziju GPL licence verzije 3:

Manipulate Text with Sed 7

Sljedeća sed naredba ispisat će sadržaj tekstualne datoteke:

Ovdje, sed izvodi operacije opisane unutar jednostrukih navodnika i ispisuje izlaz. Budući da nije definirana nijedna opcija, sed će jednostavno izvesti praznu operaciju i ispisati cijeli sadržaj datoteke.

Sed također prihvaća izlaz iz druge naredbe kao ulazni tok. U sljedećem primjeru, proslijedite sadržaj GPL v3 tekstualne datoteke u sed kako biste izveli praznu operaciju:

Kako ispisati retke

Bez ijedne zadane opcije, sed će izravno ispisati sav sadržaj datoteke. Umjesto toga, možemo eksplicitno poslati naredbu za ispis kako bismo rezultate ispisali izravno na standardni izlaz (STDOUT).

Za ispis izlaza koristite znak p:

Manipulate Text with Sed 6

Prema zadanim postavkama, sed ispisuje izlaz na zaslon. Budući da smo izričito koristili naredbu za ispis, sed će ispisati svaki redak dvaput. Sed radi redak po redak. Čita jedan redak, izvodi određene operacije, ispisuje ga i prelazi na sljedeći redak.

Kao što vidimo, svaki redak je ispisan dvaput. Ako je rezultat zbunjujući poput ovog, možemo ga očistiti pomoću opcije -n. Ona potiskuje funkciju automatskog ispisa. Budući da šaljemo naredbu za ispis, ne trebamo omogućenu zadanu funkciju ispisa izlaza:

Klase znakova u regularnim izrazima (Regex)

U regularnim izrazima postoje različite klase znakova. Svaka od tih klasa ima raspon. Mnoge klase također imaju više izraza. Većina klasa su rasponi znakova:

    • [a-z]: Malo slovo
    • [A-Z]: Veliko slovo
    • [0-9]: Znamenke
    • [a-zA-z]: Abeceda
    • [a-zA-z0-9]: Bilo koji alfanumerički znak

Ove klase znakova također imaju različite zapise:

    • [:lower:]: Malo slovo
    • [:upper:]: Veliko slovo
    • [:digit:]: Znamenke
    • [:alpha:]: Abeceda
    • [:alphanum:]: Alfanumerički znak

Za primjer, sljedeća naredba ispisat će sve retke koji sadrže barem jednu znamenku:

Manipulate Text with Sed 3

Rasponi adresa

Možemo odrediti točan dio tekstualnog toka s kojim želimo raditi. To može biti statičko mjesto retka ili raspon redaka. U prvom primjeru ispisat ćemo 5. redak iz GPL v3 tekstualne datoteke:

$ sed -n

Umjesto jednog retka, možemo odrediti i raspon redaka s kojima želimo raditi. Ovdje smo zadali raspon adresa od 5. do 9. retka (ukupno 5 redaka) na kojima će sed raditi:

gpl-3.0.txt

Postoje i različiti načini određivanja adrese retka. Umjesto da sami određujemo brojeve redaka, možemo preurediti prethodni primjer tako da sed krene od 5. retka i djeluje na sljedećih 5 redaka:

5,+5p

Drugi način određivanja redaka je korištenje intervala. U sljedećem primjeru, sed će krenuti od 1. retka i djelovati na svaki drugi redak:

Brisanje teksta

Do sada smo radili na ispisivanju ciljanih redaka teksta. Umjesto ispisivanja, možemo ukloniti retke iz izlaza. U sljedećem primjeru uklonit ćemo više redaka s početka. Ovdje ne moramo koristiti opciju -n jer želimo da sed ispiše sve ostalo što nije obrisano. Za brisanje redaka koristit ćemo opciju d:

Manipulate Text with Sed 2

Imajte na umu da je izvorna datoteka još uvijek netaknuta. Sed samo vrši brisanje redaka tijekom izlaza. Ako želite, možete spremiti sed izlaz u datoteku. Možete prepisati izvornu datoteku ili je spremiti kao drugu:

Umjesto ručnog pisanja izlaza u datoteku, sed može izvršiti uređivanje na licu mjesta na izvornoj datoteci. Ukratko, sed će urediti izvornu datoteku i zapisati sve napravljene promjene. Ova metoda će prepisati izvornu datoteku, pa je treba koristiti s oprezom:

Budući da je uređivanje na licu mjesta opasno, sed dolazi sa značajkom sigurnosne kopije. Prilikom uređivanja na licu mjesta, koristite -i.bak umjesto -i kako biste napravili sigurnosnu kopiju prije uređivanja. Sed će stvoriti sigurnosnu kopiju s .bak nastavkom:

Zamjena teksta

Ovo je, bez sumnje, jedna od najčešćih primjena alata sed. On traži tekstualni uzorak i zamjenjuje ga zadanim tekstom. Ovdje je tekstualni uzorak opisan regularnim izrazima (skraćeno regex). Da biste saznali više o korištenju regularnih izraza, pratite ovaj vodič koji opisuje kako koristiti Grep s regularnim izrazima za pretraživanje tekstualnih uzoraka u datotekama.

Evo primjera najosnovnije zamjene teksta pomoću regularnih izraza:

Ovdje je s naredba za zamjenu. Kose crte su graničnici za uzorak i zamjenu. Primijenimo to u praksi:

Manipulate Text with Sed 5

Sljedeći primjer prikazat će upotrebu podvlake (_). Ovdje će podvlake djelovati kao graničnici:

Ovdje tražimo com/index kako bismo ga zamijenili s net/home. Obratite pažnju na smještaj podvlaka jer su one vrlo važne. Na primjer, ako vam nedostaje zadnja podvlaka, sed će javiti pogrešku:

Potrebna nam je probna datoteka za vježbanje zamjene. Ovdje imam skraćenu verziju GPL v3 tekstualne datoteke:

Izvršimo neke osnovne zamjene teksta:

Pogledajte sljedeći primjer. Želimo promijeniti sve pojave riječi the u THE :

$ echo

Primjećujete li nešto? Sed nije promijenio sve pojave riječi the. Zapravo, promijenio je samo prvu pojavu. Što se događa? Ovo je zadano ponašanje opcije s. Ona se podudara samo s prvom pojavom u danom retku i prelazi na sljedeći. Kako bismo osigurali da sed provjeri cijeli redak za traženi uzorak, moramo koristiti neobaveznu zastavicu g. Let’s fix the command:

Sada radi kako je predviđeno. Još jedan zanimljiv način korištenja ove naredbe je navođenje broja pojava koje treba promijeniti. U prethodnom primjeru bile su 3 pojave riječi the, zar ne? Što ako odredimo da se promijeni samo 3. pojava? Promjena će se dogoditi na neobaveznoj zastavici:

Ako radite s velikom tekstualnom datotekom, moglo bi vam pomoći ako sed ispisuje samo one retke u kojima su se dogodile zamjene. Kako bismo to postigli, moramo dodati još jednu dodatnu zastavicu p:

Manipulate Text with Sed 4

Osjetljivost na velika i mala slova

Prema zadanim postavkama, sve sed operacije su osjetljive na velika i mala slova. Sljedeća naredba prikazat će zadano ponašanje osjetljivosti na velika i mala slova:

$ echo "HELLO WORLD"

Zbog nepodudaranja velikih i malih slova, nema promjene. U takvoj situaciji možemo reći sed da onemogući osjetljivost na velika i mala slova. Da biste to učinili, dodajte neobaveznu zastavicu i:

Kako zamijeniti i referencirati tekstove

Moć alata sed leži uglavnom u njegovoj sposobnosti korištenja regularnih izraza. S naprednijim i složenijim regex uzorcima možemo postići mnogo više. Na primjer, možemo zamijeniti tekst od početka datoteke do određenog mjesta. Pogledajte sljedeći izraz:

Ovdje caret znak (^) označava početak retka. Operator za podudaranje bilo kojeg znaka označava se točkom (.). Zvjezdica (*) je zamjenski izraz (wildcard) koji se podudara od početka retka pa sve do GNU.

Još jedan zanimljiv trik je korištenje simbola &. Možemo ga koristiti za isticanje područja koja sed pronađe kao uzorak pretraživanja:

Manipulate Text with Sed

Završne misli

U ovom smo vodiču istražili osnove naredbe sed . Naučili smo kako ispisati određene retke, pretraživati tekstove, brisati i mijenjati tekstove, prepisivati tekstove i koristiti regularne izraze. Ispravno oblikovana sed naredba može dramatično transformirati tekstualni dokument. Sada možete uspješno manipulirati tekstom u Linuxu uz pomoć alata sed.

Sretno s radom na računalu!

author

Hark Labs

Autor · CloudSigma

Preslav Dobrev je kreativni dizajner u CloudSigma, usredotočen na dosljedan poslovni identitet korištenjem tradicionalnih i inovativnih marketinških kanala. Vješt je u spajanju umjetničke vizije sa strateškim marketingom kako bi stvorio dojmljive brendirane priče.

Komentari

Još nema komentara. Budite prvi.