Linux-kommandot `fold` hanterar oregelbunden utdata effektivt. Genom att kontrollera bredden på utmatningen kan du bearbeta stora textstycken, oändliga strängar och oformaterade dataströmmar. Lär dig hur det fungerar.
Hur textrader fungerar i Linux-terminalen
En grundläggande regel i Linux är att förstå sin motståndare. Så låt oss definiera vad en textrad egentligen är. Det är en sekvens av tecken – bokstäver, siffror, symboler och blanksteg – som avslutas med en speciell byte som indikerar ”börja en ny rad”. I Linux och Unix används radmatning, eller ”newline”-tecken, som radslutmarkör. Detta är en byte med värdet 0x0a i hexadecimal representation, vilket motsvarar tio i decimal.
Olika operativsystem använder olika bytevärden för att signalera slutet på en rad. Windows använder en två-byte-sekvens. I Windows-textfiler följs radmatningstecknet omedelbart av ett vagnreturtecken, som är 0x0d i hexadecimal och tretton i decimal.
Termerna ”radmatning” och ”vagnretur” har sitt ursprung från skrivmaskinens tid. Valset, cylindern som papperet var lindat runt, var monterad på en rörlig vagn. Vagnen flyttades ett tecken åt vänster varje gång en tangent trycktes. För att starta en ny rad tryckte man på en spak som återförde vagnen till dess utgångsläge och roterade samtidigt valsen, vilket flyttade papperet uppåt med en rads höjd. Denna process kallades ”vagnretur”, och själva rotationen av valsen (papperets frammatning) kallades ”radmatning”.
När skrivmaskinerna elektrifierades ersattes spaken av en knapp. Knappen fick beteckningen ”Carriage Return” eller bara ”Return”. Vissa tidiga datorer, som till exempel BBC Micro, behöll namnet ”Return” på vad vi idag kallar Enter-tangenten.
Som regel är radmatningstecken osynliga. Du kan bara observera deras effekt. Ett radmatningstecken tvingar programvara som visar eller bearbetar text att börja en ny rad.
Men vad är problemet med långa rader?
Text utan, eller med väldigt få, radmatningstecken blir för bred för att läsas bekvämt i ett terminalfönster. Det är besvärande, men inte omöjligt att hantera.
Ett större problem uppstår när rader är så långa att de skapar svårigheter för programvara som behöver bearbeta, överföra eller ta emot texten. Det kan bero på interna buffertstorlekar eller andra programvarubegränsningar som du inte kan justera.
Men det finns en lösning på det, och den kallas `fold`.
Första stegen med `fold`
Låt oss titta på text som innehåller väldigt långa rader. Observera att vi inte talar om meningar här. (Även om texten kommer från Herman Melvilles Moby Dick, får vi det bästa av två världar.)
En textrad sträcker sig från det sista radmatningstecknet (eller filens början om det är den första raden i filen) till nästa radmatningstecken, oavsett vad som finns emellan. En rad kan innehålla många meningar och lindas många gånger i terminalfönstret, men det är fortfarande en enda textrad.
Låt oss först titta på texten i dess råa form:
less moby-dick.txt
Texten visas i less:
Texten sträcker sig från den ena kanten av fönstret till den andra, med fula radbrytningar som delar ord mitt itu.
Vi har också en annan version av filen med korta rader:
less short-lines-moby-dick.txt
Raderna i den här filen är mycket kortare. Varje rad avslutas med ett radmatningstecken.
Med kommandot `hexdump` kan vi granska bytevärdena i filen och se radmatningstecknen. Alternativet `-C` (kanoniskt) formaterar utdata så att de hexadecimala värdena visas tydligt.