V tem priročniku bomo predstavili zamenjavo novih vrstic s presledkom z uporabo sed.
Uporaba sed za zamenjavo besedila
Najprej si na hitro poglejmo izvajanje osnovnega iskanja in zamenjave z uporabo sed. Ista metoda bo uporabljena pri zamenjavi novih vrstic s presledki z nekaterimi dodatnimi možnostmi. Struktura ukazov je naslednja:
$ sed -e 's///'
Oglejte si naslednji ukaz:
$ echo 'hitra rjava lisica' | sed -e 's/hitro/hitro/g'
Ukaz echo natisne niz v STDOUT . Tok STDOUT je potem cevovod do sed. Naročili smo sed, da vsak primerek quick zamenja s fast. Končno se izhod natisne na zaslon.
Zamenjava novih vrstic s presledkom
Za predstavitev sem ustvaril to besedilno datoteko test.txt z več lažnimi vsebinami:
$ cat test.txt
Ukaz sed sprejema regularne izraze za opis različnih vzorcev. Z uporabo te funkcije bomo novo vrstico opisali kot \n. Poskusimo zamenjati nove vrstice s presledki:
$ sed -e 's/\n/ /g' test.txt
Vendar to ni delovalo po pričakovanjih. Za dosego tega cilja potrebujemo nekaj dodatnih možnosti. Oglejte si naslednji ukaz:
$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt
Ukaz sed ima več razdelkov; vsaka označuje določeno nalogo:
- :a: Ustvari oznako 'a'
- N: doda naslednjo vrstico prostoru vzorca
- $!ba: Če ni zadnja vrstica, se vrne na oznako 'a'
- s/\n/ /g: Najde in zamenja novo vrstico (\n) s presledkom (/ /). Vzorec se ujema globalno (/g)
Ukaz sed kroži skozi korake, dokler ne doseže zadnje vrstice, pri čemer vse znake \n nadomesti s presledkom.
Namesto tega zapletenega ukaza lahko stvari poenostavimo z uporabo zastavice -z, ki določa sed za delo z zapisi, ločenimi z ničlami. Ukaz bi izgledal takole:
$ sed -z -e 's/\n/ /g' test.txt
Alternativne metode
Medtem ko lahko sed nalogo opravi v redu, obstaja nekaj alternativnih orodij. V tem razdelku jih bomo na kratko preučili nekaj.
V naslednjem primeru lahko z ukazom tr zamenjamo novo vrstico s presledkom na preprost način:
$ tr '\n' ' ' < test.txt
Za delo lahko uporabimo tudi perl. Tudi naslednja sintaksa je podobna tisti, ki smo jo uporabili pri sed (vendar poenostavljena):
$ perl -p -e 's/\n/ /' test.txt
Drug način za zamenjavo novih vrstic s presledki je uporaba ukaza paste. Upoštevajte, da lahko odstrani samo en znak:
$ paste -s -d ' ' test.txt
Podobno kot sed, Linux prihaja z drugim orodjem awk. Podobno kot sed lahko izvede tudi nekatere napredne zamenjave vnosa. Za naš namen uporabite naslednji ukaz awk:
$ awk 1 ORS=' ' test.txt
Zaključek
Ta vodnik je raziskal, kako lahko zamenjamo novo vrstico s presledkom z uporabo sed. To je bilo doseženo na dva različna načina. Ta priročnik vključuje tudi druga ustrezna orodja, ki jih lahko uporabimo za zamenjavo nove vrstice s presledkom.
Namesto uporabe zapletenih ukazov, ki si jih je težko zapomniti, uporabljamo skripte Bash za izvajanje mnogih stvari v Linuxu. Čeprav gre za ceno določene zmogljivosti, sta prilagodljivost in uporabnost vredni tega. Izvedite več o Bash skriptiranje za začetnike .