Jak korzystać z polecenia fold w systemie Linux

Polecenie fold w systemie Linux przenosi niesforne dane wyjściowe do końca. Czytaj szerokie fragmenty tekstu, niekończące się ciągi i niesformatowane strumienie, kontrolując szerokość wyjścia. Naucz się jak.

Jak działają linie tekstu w terminalu Linux

Pierwsza zasada walki w Linuksie: poznaj swojego wroga. Więc zdefiniujmy to. Czym dokładnie jest wiersz tekstu? Jest to sekwencja znaków – liter, cyfr, symboli i spacji – zakończona specjalnym bajtem oznaczającym „rozpocznij nowy wiersz”. W Linuksie i Uniksie, znak nowej linii, nazywany również wysuwem linii, jest używany jako wskaźnik końca linii. To jest bajt o wartości 0x0a in szesnastkowy i dziesięć dziesiętnie.

Różne systemy operacyjne używają różnych wartości bajtów do wskazania końca wiersza. Windows używa sekwencji dwubajtowej. W plikach tekstowych systemu Windows po znaku nowego wiersza bezpośrednio następuje rozszerzenie znak powrotu karetki, czyli 0x0d w systemie szesnastkowym i trzynaście dziesiętnie.

Terminy „przejście do wiersza” i „powrót karetki” pochodzą z przeszłości do maszyny do pisania. Płyta, cylinder, wokół którego był owinięty papier, został zamontowany na ruchomym wózku. Karetka przesuwała się o jeden znak w lewo za każdym naciśnięciem klawisza. Aby rozpocząć nową linię, pchnąłeś dźwignię, która przywróciła karetkę z powrotem do pierwotnego położenia, która obróciła rolkę i przesunęła papier w górę o wysokość jednej linii. To działanie było znane jako powrót karetki, a obrót cylindra (i przesuwanie papieru) był znany jako wysuw do linii.

Dźwignia została zastąpiona kluczem, gdy maszyna do pisania została zelektryfikowana. Klucz był oznaczony jako powrót karetki lub po prostu zwrot. Niektóre wczesne komputery, takie jak BBC Micro nadal używał nazwy Return na tym, co teraz nazywamy klawiszem Enter.

Z reguły nie widać znaków nowej linii. Widać tylko ich efekt. Znak nowego wiersza wymusza na oprogramowaniu wyświetlającym lub przetwarzającym tekst rozpoczęcie nowego wiersza.

Ale jaki jest problem z długimi kolejkami?

Tekst bez lub z bardzo małą liczbą znaków nowej linii będzie zbyt szeroki, aby wygodnie czytać w oknie terminala. To irytujące, ale jest możliwe.

Bardziej szkodliwym problemem jest radzenie sobie z wierszami o takiej długości, że stanowią one problem dla oprogramowania, które musi przetwarzać, przesyłać lub odbierać tekst. Może to być spowodowane wewnętrznymi długościami buforów lub innymi aspektami oprogramowania, których nie można dostosować.

Ale jest na to rozwiązanie, zwane fold.

Pierwsze kroki z fałdą

Przyjrzyjmy się fragmentowi tekstu, który zawiera bardzo, bardzo długie linie. Zwróć uwagę, że nie mówimy tutaj o zdaniach. (Chociaż tekst pochodzi od Moby Dicka Hermana Melville’a, więc mamy to, co najlepsze z obu światów.)

Linia tekstu to wszystko od ostatniego znaku nowej linii (lub początku pliku, jeśli jest to pierwsza linia w pliku), aż do następnego znaku nowej linii, niezależnie od tego, co jest pomiędzy. Linia może zawierać wiele zdań. Może wielokrotnie zawijać się w oknie terminala. Ale to wciąż pojedynczy wiersz tekstu.

Spójrzmy na tekst w jego surowej postaci:

less moby-dick.txt

mniej moby-dick.txt w oknie terminala

Tekst jest wyświetlany w mniej:

Moby Dick wyświetlał się mniej w oknie terminala

Tekst rozciąga się od jednej krawędzi okna do drugiej, a zawijanie wierszy jest brzydkie i łamie słowa w środku.

Mamy kolejną wersję pliku z krótkimi liniami:

less short-lines-moby-dick.txt

less-lines-moby-dick.txt w oknie terminala

Linie w tym pliku są znacznie krótsze. Każda linia jest zakończona znakiem nowej linii.

Krótka wersja Moby Dicka wyświetlana w mniejszym formacie w oknie terminala

Jeśli użyjemy polecenia hexdump, możemy spójrz na wartości bajtów w pliku i zobacz znaki nowego wiersza. Opcja -C (canonical) formatuje dane wyjściowe w celu wyświetlenia wartości szesnastkowych w pliku main