Sed Zamijeni novi red razmakom

Sed Zamijeni Novi Red Razmakom



U UNIX/Linuxu naredba sed je namjenski alat za uređivanje tokova. Može izvoditi različite operacije na tekstualnom toku, kao što je pretraživanje, pronalaženje i zamjena te umetanje/brisanje. Međutim, većinom se sed koristi za pronalaženje i zamjenu tekstualnog sadržaja.

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 .