Komenda fold w systemie Linux pozwala na przeniesienie długich danych wyjściowych na koniec, ułatwiając ich czytanie. Dzięki niej można kontrolować szerokość wyświetlanych fragmentów tekstu, co jest szczególnie przydatne w przypadku długich ciągów znaków. Dowiedz się, jak to działa.
Zasady działania linii tekstu w terminalu Linux
Pierwsza zasada, którą warto znać w Linuksie, to zrozumienie, jak działają linie tekstu. Czym właściwie jest linia tekstu? To ciąg znaków – liter, cyfr, symboli oraz spacji – zakończony specjalnym bajtem, który informuje o rozpoczęciu nowej linii. W systemach Linux i Unix, znak nowej linii, znany również jako wysuw linii, służy jako wskaźnik końca wiersza. Ten bajt ma wartość 0x0a w systemie szesnastkowym oraz 10 w systemie dziesiętnym.
Różne systemy operacyjne stosują różne wartości bajtów do oznaczania końca wiersza. Na przykład, Windows używa sekwencji dwubajtowej. W plikach tekstowych systemu Windows, znak nowej linii jest bezpośrednio poprzedzony znakiem powrotu karetki (0x0d w systemie szesnastkowym i 13 w systemie dziesiętnym).
Terminy „przejście do wiersza” i „powrót karetki” mają swoje korzenie w historii maszyn do pisania. Cylinder, na którym umieszczany był papier, był zamocowany na ruchomym wózku. Karetka przesuwała się w lewo za każdym naciśnięciem klawisza. Aby rozpocząć nowy wiersz, należało pchnąć dźwignię, co powodowało powrót karetki do pierwotnej pozycji, obrót rolki i przesunięcie papieru o wysokość jednej linii. To działanie nazywano powrotem karetki, a obrót cylindra – wysuwem do linii.
Wraz z elektryfikacją maszyn do pisania, dźwignia została zastąpiona klawiszem, który oznaczano jako powrót karetki lub po prostu zwrot. Niektóre wczesne komputery, takie jak BBC Micro, dalej używały nazwy Return dla tego, co dziś określamy jako klawisz Enter.
Zazwyczaj znaki nowej linii są niewidoczne; widzimy jedynie ich wpływ. Znak nowej linii zmusza oprogramowanie do wyświetlania lub przetwarzania tekstu w nowym wierszu.
Jakie problemy mogą wynikać z długich linii?
Tekst, który nie zawiera znaków nowej linii lub ma ich bardzo mało, może być zbyt szeroki, co utrudnia jego czytanie w terminalu. To jest frustrujące, ale wciąż możliwe do zrealizowania.
Znacznie poważniejszym problemem jest radzenie sobie z wierszami, które są tak długie, że powodują trudności z oprogramowaniem odpowiedzialnym za przetwarzanie, przesyłanie lub odbieranie tekstu. Może to być spowodowane ograniczeniami wewnętrznymi buforów lub innymi aspektami oprogramowania, które nie mogą być zmieniane.
Na szczęście istnieje rozwiązanie – komenda fold.
Pierwsze kroki z komendą fold
Przyjrzyjmy się fragmentowi tekstu, który zawiera bardzo długie linie. Warto zauważyć, że nie chodzi tu o zdania. (Tekst pochodzi z „Moby Dicka” Hermana Melville’a, więc mamy do czynienia z najlepszymi przykładami z obu światów.)
Linia tekstu to wszystko, co znajduje się pomiędzy ostatnim znakiem nowej linii (lub początkiem pliku, jeśli jest to pierwsza linia) a następnym znakiem nowej linii, niezależnie od tego, co znajduje się w środku. Linia może zawierać wiele zdań i może wielokrotnie zawijać się w oknie terminala, ale wciąż pozostaje pojedynczym wierszem tekstu.
Spójrzmy na tekst w jego surowej formie:
less moby-dick.txt
Tekst wyświetlany jest w programie less:
Tekst rozciąga się od jednej krawędzi okna do drugiej, a zawijanie wierszy jest nieestetyczne i łamie słowa w nieodpowiednich miejscach.
Mamy również wersję pliku z krótkimi liniami:
less short-lines-moby-dick.txt
Linie w tym pliku są znacznie krótsze, a każda z nich kończy się znakiem nowej linii.
Jeśli zastosujemy komendę hexdump, możemy sprawdzić wartości bajtów w pliku oraz zobaczyć znaki nowego wiersza. Opcja -C (kanoniczna) formatuje dane wyjściowe tak, aby wyświetlić wartości szesnastkowe w pliku.
newsblog.pl