Příkaz fold
v Linuxu je nástroj, který vám pomůže zkrotit neposlušný textový výstup. Umožňuje vám pracovat s dlouhými textovými úseky, nekonečnými řetězci znaků a neformátovanými proudy dat tím, že kontroluje šířku výstupu. Podívejme se, jak to funguje.
Jak jsou strukturovány textové řádky v linuxovém terminálu
Prvním krokem k pochopení, jak se s tím vypořádat, je definovat, co vlastně řádek textu je. V podstatě jde o posloupnost znaků (písmen, číslic, symbolů a mezer), která končí speciálním znakem, který označuje „nový řádek“. V systémech Linux a Unix se jako indikátor konce řádku používá právě znak nového řádku, někdy označovaný jako posun řádku. Tento znak má v šestnáctkové soustavě hodnotu 0x0a, což odpovídá desítkové hodnotě 10.
Různé operační systémy používají pro označení konce řádku odlišné bajtové hodnoty. Například Windows používá k tomuto účelu dvoubytovou sekvenci. V textových souborech systému Windows následuje znak nového řádku bezprostředně znak návratu vozíku, který má v hexadecimální soustavě hodnotu 0x0d, tedy 13 v desítkové soustavě.
Termíny „linefeed“ (posun řádku) a „carriage return“ (návrat vozíku) mají kořeny v éře psacích strojů. Psací stroje měly válec, na který se umisťoval papír. Tento válec byl součástí pohyblivého vozíku. Po každém stisku klávesy se vozík posunul o jeden znak doleva. Pro zahájení nového řádku bylo nutné stisknout páčku, která vrátila vozík do výchozí pozice a zároveň otočila válečkem, aby se papír posunul o řádek nahoru. Tato akce se skládala z návratu vozíku a posunu papíru, což bylo označováno jako „posun řádku“.
Když se psací stroje staly elektrickými, páka byla nahrazena klávesou. Tato klávesa byla označována jako „Carriage Return“ nebo jednoduše „Return“. Dokonce i některé rané počítače, jako BBC Micro, používaly název „Return“ pro klávesu, kterou dnes známe jako „Enter“.
Znaky nového řádku jsou obvykle neviditelné. Vidíte jen jejich efekt. Způsobují, že software, který text zobrazuje nebo zpracovává, začne nový řádek.
Problém s dlouhými řádky
Problém nastává, když text neobsahuje žádné nebo jen velmi málo znaků nového řádku. V takovém případě je text příliš široký a obtížně čitelný v okně terminálu. To je nepohodlné, ale zvládnutelné.
Větší obtíže nastávají, když délka řádků představuje problém pro software, který text potřebuje zpracovat, přenést nebo přijmout. Důvodem může být například omezená velikost vnitřní vyrovnávací paměti nebo jiné hardwarové či softwarové limity, které nemáte možnost ovlivnit.
Právě zde přichází ke slovu příkaz fold
.
Jak začít s příkazem fold
Podívejme se na ukázku textu s velmi dlouhými řádky. Nejedná se o věty v pravém slova smyslu, i když se jedná o úryvek z knihy Moby Dick od Hermana Melvilla, takže se nám spojí obojí dohromady.
Řádek textu je definován jako vše od posledního znaku nového řádku (nebo začátku souboru, pokud je to první řádek) až po následující znak nového řádku. Řádek může obsahovat mnoho vět a může se opakovaně zalomit v okně terminálu, ale stále je považován za jeden řádek textu.
Zobrazme si nejprve text v jeho původní podobě:
less moby-dick.txt
Text se zobrazí takto:
Text se táhne od jednoho okraje okna k druhému a dochází k nevzhlednému lámání slov uprostřed.
Máme také verzi souboru s kratšími řádky:
less short-lines-moby-dick.txt
Řádky v tomto souboru jsou mnohem kratší a každý končí znakem nového řádku.
Pokud použijeme příkaz hexdump
, můžeme zkontrolovat hodnoty jednotlivých bajtů v souboru a podívat se na znaky nového řádku. Volba -C
(canonical) formátuje výstup tak, že zobrazuje hexadecimální hodnoty spolu s jejich textovou reprezentací.