U ovom vodiču prikazat ćemo zamjenu novih redaka razmakom pomoću sed-a.
Korištenje sed-a za zamjenu teksta
Prvo, pogledajmo brzo izvođenje osnovnog traženja i zamjene pomoću sed-a. Ista metoda će se koristiti prilikom zamjene novih redaka razmacima s nekim dodatnim opcijama. Struktura zapovijedi je sljedeća:
$ sed -e 's///'
Pogledajte sljedeću naredbu:
$ echo 'brza smeđa lisica' | sed -e 's/brzo/brzo/g'
Naredba echo ispisuje niz u STDOUT . STDOUT tok je tada cijevima sjediti. Naložili smo sed-u da svaku instancu quick zamijeni s fast. Na kraju, rezultat se ispisuje na ekranu.
Zamjena novih redaka razmakom
Za demonstraciju, napravio sam sljedeću tekstualnu datoteku test.txt s nekoliko lažnih sadržaja:
$ mačji test.txt
Naredba sed prihvaća regularne izraze za opisivanje različitih uzoraka. Koristeći ovu značajku, opisat ćemo novi red kao \n. Pokušajmo zamijeniti nove retke razmakom:
$ sed -e 's/\n/ /g' test.txt
Međutim, to nije uspjelo kako se očekivalo. Da bismo postigli ovaj cilj, potrebne su nam neke dodatne mogućnosti. Pogledajte sljedeću naredbu:
$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt
Naredba sed ima više odjeljaka; svaki označava određeni zadatak:
- :a: Stvara oznaku 'a'
- N: dodaje sljedeći redak prostoru uzorka
- $!ba: Ako nije posljednji redak, vraća se na oznaku 'a'
- s/\n/ /g: Pronalazi i zamjenjuje novi red (\n) razmakom (/ /). Uzorak se podudara globalno (/g)
Naredba sed prolazi kroz korake dok ne dođe do posljednjeg retka, zamjenjujući sve \n znakove razmakom.
Umjesto ove složene naredbe, možemo pojednostaviti stvari upotrebom oznake -z koja navodi da sed radi sa zapisima odvojenim nulom. Naredba bi izgledala ovako:
$ sed -z -e 's/\n/ /g' test.txt
Alternativne metode
Iako sed može dobro obaviti zadatak, postoje neki alternativni alati. U ovom odjeljku ukratko ćemo ispitati nekoliko njih.
U sljedećem primjeru možemo upotrijebiti naredbu tr za zamjenu novog retka razmakom na jednostavan način:
$ tr '\n' ' ' < test.txt
Također možemo koristiti perl za obavljanje posla. Sljedeća sintaksa također je slična onoj koju smo koristili sa sed-om (ali pojednostavljena):
$ perl -p -e 's/\n/ /' test.txt
Drugi način za zamjenu novog retka razmakom je korištenje naredbe paste. Imajte na umu da može ukloniti samo jedan znak:
$ zalijepi -s -d ' ' test.txt
Slično sed-u, Linux dolazi s još jednim alatom awk. Slično sed-u, također može izvesti neke napredne zamjene na ulazu. Za našu svrhu upotrijebite sljedeću awk naredbu:
$ awk 1 ORS=' ' test.txt
Zaključak
Ovaj vodič je istražio kako možemo zamijeniti novi red razmakom koristeći sed. To je postignuto na dva različita načina. Ovaj vodič također uključuje druge relevantne alate koje možemo koristiti za zamjenu novog retka razmakom.
Umjesto upotrebe složenih naredbi koje je teško zapamtiti, koristimo Bash skriptiranje za izvođenje mnogih stvari u Linuxu. Iako dolazi po cijenu nekih performansi, fleksibilnost i upotrebljivost su vrijedne toga. Nauči više o Bash skriptiranje za početnike .