
Het Linux fold commando zorgt voor onhandelbare output. Lees brede stukken tekst, eindeloze strings en ongeformatteerde streams door de breedte van de uitvoer te regelen. Leren hoe.
Hoe tekstregels werken in de Linux-terminal
Eerste regel van Linux-gevechten: ken je vijand. Dus laten we het definiëren. Wat is een regel tekst precies? Het is een reeks tekens (letters, cijfers, symbolen en witruimte) die wordt beëindigd door een speciale byte die ‘begin een nieuwe regel’ betekent. In Linux en Unix wordt het newline-teken, ook wel een linefeed genoemd, gebruikt als indicator voor het einde van de regel. Dit is een byte met een waarde van 0x0a in hexadecimaal en tien in decimaal.
Verschillende besturingssystemen gebruiken verschillende bytewaarden om het einde van een regel aan te geven. Windows gebruikt een reeks van twee bytes. In Windows-tekstbestanden wordt het teken voor een nieuwe regel onmiddellijk gevolgd door het teken van de regelterugloop, dat 0x0d is in hexadecimaal en dertien in decimaal.
De termen “regelinvoer” en “regelterugloop” dateren uit de typemachine. De plaat, de cilinder waar het papier omheen was gewikkeld, was op een beweegbare wagen gemonteerd. Elke keer dat u op een toets drukt, schuift de wagen een karakterbreedte naar links. Om een nieuwe lijn te beginnen, duwde u op een hendel die de wagen terug naar zijn oorspronkelijke positie bracht, en die de rol verdraaide en het papier één lijn omhoog bewoog. Deze actie stond bekend als de wagenterugloop en de rotatie van de cilinder (en de voortgang van het papier) stond bekend als een linefeed.
De hendel werd vervangen door een sleutel toen de typemachine werd geëlektrificeerd. De sleutel heette Carriage Return of gewoon Return. Sommige vroege computers zoals de BBC Micro gebruikten nog steeds de naam Return op wat we nu de Enter sleutel.
U kunt in de regel geen tekens voor nieuwe regels zien. Je kunt alleen hun zien effect. Het teken voor een nieuwe regel dwingt software die tekst weergeeft of verwerkt om een nieuwe regel te beginnen.
Maar wat is het probleem met lange rijen?
Tekst zonder of met heel weinig nieuwe-regel-tekens zal te breed zijn om gemakkelijk te kunnen lezen in het terminalvenster. Dat is vervelend, maar het is te doen.
Een schadelijker probleem is het omgaan met regels die zo lang zijn dat ze een probleem vormen voor de software die de tekst moet verwerken, verzenden of ontvangen. Dit kan worden veroorzaakt door interne bufferlengtes of andere aspecten van de software die u niet kunt aanpassen.
Maar daar is een oplossing voor, genaamd fold.
Eerste stappen met vouwen
Laten we eens kijken naar een gedeelte van de tekst met heel, heel lange regels. Merk op dat we het hier niet over zinnen hebben. (Hoewel de tekst afkomstig is van Herman Melville’s Moby Dick, hebben we dus het beste van twee werelden.)
Een regel tekst is alles vanaf het laatste teken voor een nieuwe regel (of het begin van het bestand als het de eerste regel in het bestand is) tot het volgende teken voor een nieuwe regel, ongeacht wat er tussenin zit. De regel kan veel zinnen bevatten. Het kan zich vaak in het terminalvenster wikkelen. Maar het is nog steeds een single regel tekst.
Laten we de tekst in zijn ruwe vorm bekijken:
less moby-dick.txt

De tekst wordt weergegeven in less:

De tekst strekt zich uit van de ene rand van het venster naar de andere, en de regelomlopen zijn lelijk en ze breken woorden in het midden.
We hebben een andere versie van het bestand met korte lijnen:
less short-lines-moby-dick.txt

De regels in dit bestand zijn veel korter. Elke regel wordt afgesloten met een nieuw-regel-teken.

Als we de hexdump commando, kunnen we de byte-waarden in het bestand bekijken en de tekens voor de nieuwe regel zien. De -C (canonieke) optie formatteert de uitvoer zodat hexadecimale waarden in de hoofdtekst van het scherm worden weergegeven met de tekstequivalenten in een kolom aan de zijkant. We zullen de uitvoer naar less:
hexdump -C short-lines-moby-dick.txt | less

Door op de schuine streep “/”Kom je binnen less’s zoekfunctie. Typ “0a” en druk op Enter. De tekens voor de nieuwe regel worden gemarkeerd in de tekst. U kunt door het bestand bladeren en zien waar ze verschijnen. Indien nodig kunt u de uitvoer zijwaarts schuiven met de Left Arrow en Right Arrow sleutels.

Het hebben van een teken voor een nieuwe regel aan het einde van elke regel kan een beperking op zich zijn. Ongeacht welk programma of venster deze tekst weergeeft, de lijnen kunnen zich niet aanpassen aan vensters met een breedte die breder is dan de lijnen zelf. De regellengte is afgetopt door de tekens voor nieuwe regels.
Er zijn dus problemen met zowel lange als korte lijnen.
Lange rijen verminderen
De fold commando heeft een optie -w (breedte) waarmee u een nieuwe maximale breedte voor een tekstgedeelte kunt specificeren. We geven de Moby Dick-tekst weer met een maximale breedte van 50 tekens:
fold -w 50 moby-dick.txt

De tekst wordt weergegeven in het terminalvenster, met de nieuwe maximale bestandslengte. Het originele bestand is niet gewijzigd. Het is alleen de output van fold dat is opnieuw geformatteerd.

Op het eerste gezicht ziet dit er een stuk beter uit. Maar aan het einde van de regels worden de woorden nog steeds in het midden gesplitst. Het is beslist gemakkelijker om te lezen, maar sommige lastige woordafbrekingen zijn schokkend.
Hoewel het lijkt alsof de rechtermarge van de tekst in en uit zwaait, zijn alle regellengtes hetzelfde. De regels die één teken korter lijken te zijn dan de rest, eindigen toevallig in een spatie.
Lijnen splitsen in ruimten
We kunnen de -s (spaties) optie om ervoor te zorgen dat regels alleen worden gesplitst op spatie-tekens en dat er geen woorden worden onderbroken over twee regels.
fold -w 50 -s moby-dick.txt

De uitvoer heeft nu een onregelmatige rechtermarge, maar is gemakkelijker te lezen. Alle woorden eindigen op de regels waarmee ze begonnen.

Korte lijnen langer maken
We kunnen niet alleen lange rijen korter maken, maar ook fold om de afgedwongen lijnlengtes van kortere lijnen te verwijderen.
fold -w 75 short-lines-moby-dick.txt

De tekens voor de nieuwe regel worden verwijderd en de tekst loopt nu rond of vóór de toegewezen maximale lengte.

Veranderingen permanent maken
fold kan het originele bestand niet wijzigen. Als u de wijzigingen wilt behouden, moet u de uitvoer omleiden van fold in een nieuw bestand. We sturen de uitvoer om naar een bestand met de naam ‘modified-moby-dick.txt’.
fold -w 75 -s short-lines-moby-dick.txt > modified-moby-dick.txt

Hoe ziet ons nieuwe bestand eruit?

De tekst loopt nu netjes rond op onze nieuwe lijndikte, die breder is dan de regellengten van het originele bestand.
Vouwen gebruiken met streams
We kunnen gebruiken fold om tekststromen opnieuw te formatteren. Het is niet beperkt tot het alleen werken met bestanden. Laten we eens kijken wat de onbewerkte uitvoer van het journalctl tool ziet eruit als. De -f (volg) optie toont de nieuwste vermeldingen in de systemd dagboek en updates als er nieuwe items binnenkomen.
sudo journalctl -f

De uitvoer loopt door de rand van het terminalvenster.

Het ziet er niet slecht uit, maar laten we voor de demonstratie de breedte iets verkleinen. We gaan de output van journalctl in fold. We stellen de maximale breedte in op 65 tekens en we breken de regels alleen op spaties.
sudo journalctl -f | fold -w 65 -s

Het scherm ziet er iets minder overweldigend uit en is ook een beetje netter.

Muren met massieve tekst kunnen ondoordringbaar lijken. Ze zijn onaangenaam en ondermijnend om mee om te gaan. Als je het bos door de bomen wilt kunnen zien, bel dan even fold en een beetje orde opleggen.