Sed Nahradiť nový riadok medzerou

Sed Nahradit Novy Riadok Medzerou



V systéme UNIX/Linux je príkaz sed špecializovaný nástroj na úpravu streamov. Môže vykonávať rôzne operácie s textovým prúdom, ako je vyhľadávanie, vyhľadávanie a nahradzovanie a vkladanie/odstraňovanie. Z väčšej časti sa však sed používa na vyhľadávanie a nahradenie textového obsahu.

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 .