V tejto príručke predvedieme nahradenie nových riadkov medzerou pomocou sed.
Použitie sed na nahradenie textu
Najprv sa rýchlo pozrime na vykonávanie základného hľadania a nahradenia pomocou sed. Rovnaká metóda sa použije pri nahrádzaní nových riadkov medzerami s niektorými ďalšími možnosťami. Štruktúra príkazu je nasledovná:
$ sed -e 's///'
Pozrite sa na nasledujúci príkaz:
$ echo 'rýchla hnedá líška' | sed -e 's/quick/fast/g'
Príkaz echo vytlačí reťazec do STDOUT . Stream STDOUT je potom potrubím do sed. Inštruovali sme sed, aby nahradil akúkoľvek inštanciu rýchleho nahradenia rýchlym. Nakoniec sa výstup vytlačí na obrazovku.
Nahradenie nových riadkov medzerou
Na ukážku som vytvoril nasledujúci textový súbor test.txt s niekoľkými fiktívnymi obsahmi:
$ test mačiek.txt
Príkaz sed akceptuje regulárne výrazy na popis rôznych vzorov. Využitím tejto funkcie opíšeme nový riadok ako \n. Skúsme nahradiť nové riadky medzerami:
$ sed -e 's/\n/ /g' test.txt
To však nefungovalo podľa očakávania. Na dosiahnutie tohto cieľa potrebujeme ďalšie možnosti. Pozrite sa na nasledujúci príkaz:
$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt
Príkaz sed má viacero sekcií; každý označuje konkrétnu úlohu:
- :a: Vytvorí označenie „a“
- N: Pridá ďalší riadok do priestoru vzoru
- $!ba: Ak nie je posledný riadok, vráti sa na označenie „a“
- s/\n/ /g: Vyhľadá a nahradí nový riadok (\n) medzerou (/ /). Vzor sa zhoduje globálne (/g)
Príkaz sed prechádza kroky, kým nedosiahne posledný riadok, pričom všetky znaky \n nahradí medzerou.
Namiesto tohto zložitého príkazu môžeme veci zjednodušiť použitím príznaku -z, ktorý špecifikuje sed na prácu so záznamami oddelenými nulou. Príkaz by vyzeral takto:
$ sed -z -e 's/\n/ /g' test.txt
Alternatívne metódy
Zatiaľ čo sed túto úlohu zvládne v pohode, existuje niekoľko alternatívnych nástrojov. V tejto časti stručne preskúmame niekoľko z nich.
V nasledujúcom príklade môžeme pomocou príkazu tr jednoduchým spôsobom nahradiť nový riadok medzerou:
$ tr '\n' ' ' < test.txt
Na vykonanie úlohy môžeme použiť aj perl. Nasledujúca syntax je tiež podobná tej, ktorú sme použili so sed (ale zjednodušená):
$ perl -p -e 's/\n/ /' test.txt
Ďalším spôsobom, ako nahradiť nové riadky medzerami, je použitie príkazu paste. Upozorňujeme, že môže odstrániť iba jeden znak:
$ paste -s -d ' ' test.txt
Podobne ako sed, Linux prichádza s ďalším nástrojom awk. Podobne ako sed dokáže vykonávať aj niektoré pokročilé výmeny na vstupe. Na náš účel použite nasledujúci príkaz awk:
$ awk 1 ORS=' ' test.txt
Záver
Táto príručka skúmala, ako môžeme nahradiť nový riadok medzerou pomocou sed. Dosiahlo sa to dvoma rôznymi spôsobmi. Táto príručka obsahuje aj ďalšie relevantné nástroje, ktoré môžeme použiť na nahradenie nového riadku medzerami.
Namiesto používania zložitých príkazov, ktoré sa ťažko zapamätajú, používame skriptovanie Bash na vykonávanie mnohých vecí v systéme Linux. Aj keď je to za cenu určitého výkonu, flexibilita a použiteľnosť za to stoja. Naučiť sa viac o Bash skriptovanie pre začiatočníkov .