- Inzicht in de verschillende regelafbrekingsformaten in tekstbestanden tussen besturingssystemen helpt incompatibiliteiten te voorkomen.
- Met dos2unix en unix2dos kunt u tekstbestanden veilig converteren tussen Windows en Linux/Unix, met diverse geavanceerde opties om de conversie aan te passen aan iedere behoefte.
- Het conversieproces omvat niet alleen regeleinden, maar ook het beheer van coderingen, BOM-tags en symbolische koppelingen, die allemaal van essentieel belang zijn in moderne omgevingen.
- Integreer deze commando's in scripts en automatiseringen faciliteert massaal bestandsbeheer in gemengde omgevingen, waardoor de workflow tussen computers en servers wordt geoptimaliseerd.

Heb je ooit te maken gehad met tekstbestanden die niet correct worden weergegeven in je favoriete editor op Linux of Windows? Dit komt meestal door verschillen in de tekens die verschillende besturingssystemen gebruiken om het einde van elke regel aan te geven. Als je in gemengde omgevingen werkt of samenwerkt met anderen die verschillende systemen gebruiken, ben je deze kleine maar belangrijke ergernis waarschijnlijk al vaker tegengekomen. Gelukkig zijn er klassieke commando's zoals `dos2unix` en `unix2dos` waarmee je bestanden eenvoudig kunt converteren tussen DOS/Windows- en Unix/Linux-tekstformaten.
In het volgende artikel bespreken we alles wat met de commando's dos2unix en unix2dos te maken heeft . We behandelen alles, van de meest basale en theoretische concepten over regeleinden en de verschillen tussen systemen, tot een overzicht van de meest geavanceerde opties in beide programma's, gedetailleerde gebruiksvoorbeelden, alternatieven en trucs om je uit de problemen te helpen. Als je je ooit hebt afgevraagd wat elke parameter precies doet of waarom een bestand soms beschadigd lijkt terwijl dat niet zo is, vind je het antwoord hier. En we doen dat in duidelijke taal en met praktische voorbeelden, zodat iedereen die een oplossing zoekt weet hoe het moet, maar ook zodat iedereen die alles wat er "onder de motorkap" gebeurt volledig wil begrijpen, dat kan.
Waarom bestaan dos2unix en unix2dos?
Wat betreft de compatibiliteit van besturingssystemen is een van de meest opvallende (en tegelijkertijd meest irritante) verschillen hoe elk systeem het einde van een regel in een tekstbestand weergeeft. In Unix en Linux wordt het einde van een regel aangegeven met het teken LF (Line Feed, \n ), terwijl in DOS/Windows de sequentie CRLF (Carriage Return + Line Feed, \r\n ) wordt gebruikt . Om het nog ingewikkelder te maken, gebruikten oudere (pre-OSX) Macs alleen CR ( \r ), hoewel ze tegenwoordig wel overeenkomen met het Unix-formaat.
Wat gebeurt er dan? Als je een in Windows gemaakt bestand bewerkt in een Linux-teksteditor, zie je vaak vervelende ^M -tekens aan het einde van elke regel, of het bestand wordt mogelijk niet correct verwerkt door sommige programma's. Omgekeerd kan het openen van een Linux-bestand in Kladblok van Windows ervoor zorgen dat de tekst er rommelig uitziet, alsof alles op één regel staat. Dit is waar dos2unix en unix2dos (en andere equivalenten zoals fromdos , todos , mac2unix of unix2mac ) van pas komen, waarmee je gemakkelijk kunt schakelen tussen verschillende regeleinde-indelingen.
Hoe werken dos2unix en unix2dos?
De kern van beide commando's is heel eenvoudig: ze converteren regeleinden in tekstbestanden tussen DOS/Windows- en Unix-formaten. `dos2unix` zet elke CRLF- regeleinde ( `\r\n` ) om in een regeleinde met alleen `LF` ( `\n` ), terwijl `unix2dos` het omgekeerde doet. Er zijn ook varianten voor conversies tussen Mac- en Unix-formaten. Beide commando's kunnen het originele bestand overschrijven of de conversie opslaan in een nieuw bestand door de juiste optie op te geven. Laten we eens kijken naar het basisgebruik:
- Converteren van DOS/Windows naar Unix/Linux:
dos2unix archivo.txt - Converteren van Unix/Linux naar DOS/Windows:
unix2dos archivo.txt - Sla het resultaat op in een nieuw bestand:
dos2unix -n origen.txt destino.txt
Regelafbrekingen in besturingssystemen: een geschiedenis van incompatibiliteiten
Dit probleem stamt uit de begintijd van de computertechnologie, toen elk besturingssysteem andere conventies hanteerde. Unix/Linux gebruikte altijd de regeleinde LF ( \n ). DOS/Windows koos voor de CRLF -combinatie ( \r\n ), een conventie die was overgenomen van typemachines. Het klassieke Mac OS (vóór Mac OS X) gebruikte CR ( \r ), hoewel zelfs vandaag de dag bestanden in verschillende formaten nog steeds incompatibiliteiten veroorzaken.
- Unix/Linux: elke regel eindigt met \n (LF).
- DOS/Windows: Elke regel eindigt met \ R \ n (CRLF).
- Klassieke Mac: elke regel eindigt met \r (CR).
Tegenwoordig hebben Mac OS X en zijn opvolgers de Unix-conventie overgenomen en gebruiken ze LF als regeleindeteken. De erfenis van bestanden met gemengde formaten blijft echter een bron van problemen, met name bij het overdragen van gegevens tussen platformen.
Wat doet dos2unix (en unix2dos) eigenlijk met bestanden?
Beide commando's lezen het bestand regel voor regel , detecteren regeleinden volgens het bronformaat en herschrijven het bestand door het juiste regeleindteken of de juiste tekenreeks voor het doelsysteem in te voegen. Afhankelijk van de versie en de gebruikte opties kunnen ze bovendien ook aspecten afhandelen zoals tekenencodering (bijv. Unicode), bestandsbeheer met bytevolgordemarkeringen (BOM's), behoud van datums en bestandsrechten.
Algemene opties en parameters in dos2unix en unix2dos
Beide commando's beschikken over een groot aantal parameters waarmee ze hun werking kunnen aanpassen aan specifieke situaties. Hieronder sommen we de meest voorkomende en hun bruikbaarheid op:
- -n: Hiermee kunt u de invoer- en uitvoerbestanden opgeven. Voorbeeld:
dos2unix -n input.txt output.txt. Op deze manier kunt u het originele bestand behouden. - -k: Zorgt ervoor dat de wijzigingsdatum van het uitvoerbestand gelijk blijft aan die van het invoerbestand.
- -o: Voert de conversie “ter plaatse” uit, dat wil zeggen, overschrijft het originele bestand met het resultaat.
- -f: Dwingt conversie af, zelfs van binaire bestanden, hoewel dit over het algemeen niet wordt aanbevolen.
- -c: Geeft de conversiemodus aan: ascii (standaard), 7bit, iso o Mac. Bijvoorbeeld
dos2unix -c iso archivo.txt. - -b / –houd-bom: Behoudt het bytevolgordeteken (BOM) in Unicode-bestanden.
- -m / –add-bom: Voegt expliciet een BOM toe aan het uitvoerbestand.
- -l / –nieuwe regel: Voegt een extra lege regel toe na elke geconverteerde regelovergang.
- –allow-chown: Hiermee kunt u de eigenaar van het bestand op bepaalde systemen en modi wijzigen.
- -h / -helpen: Geeft de help weer en beëindigt het programma.
- -q / -rustig: Activeer de stille modus om geen berichten op het scherm weer te geven.
- -v / - Verbaal: Geeft gedetailleerde informatie over de conversie weer.
Dit zijn slechts enkele van de beschikbare opties. De meeste moderne versies van dos2unix/unix2dos bevatten er veel meer, met name voor het afhandelen van codering, symbolische links en selectieve patroonconversie.
Geavanceerde verwerking van coderingen en Unicode
Een van de meest problematische aspecten van het converteren van tekstbestanden is tegenwoordig de tekencodering . De UTF-8- standaard is de meest gangbare in Unix/Linux en wordt momenteel ook aanbevolen in Windows, maar veel bestanden bestaan in UTF-16 , ISO-8859-1 , Windows-1252 en andere coderingen . De huidige versies van dos2unix kunnen de meeste van deze gevallen redelijk goed verwerken, hoewel er belangrijke nuances zijn om rekening mee te houden:
- Converteer UTF-16 naar UTF-8: dos2unix probeert UTF-16-bestanden om te zetten naar UTF-8 (op Windows) of naar de lokale codering (op Unix/Linux). Als het UTF-16-bestand geen BOM heeft, wordt het mogelijk als binair behandeld en niet geconverteerd.
- BOM-beheer: In Windows is het gebruikelijk om Unicode-bestanden te gebruiken die een bytevolgordemarkering hebben. Dos2unix kan het toevoegen of verwijderen, afhankelijk van de opties -b y -m.
- Specifieke coderingen: Met behulp van de parameters iso, -1252, -850, enz., kunt u conversie tussen specifieke codepagina's afdwingen, wat handig is als u een bestand ontvangt uit een oude omgeving of een specifieke locatie.
Houd er rekening mee dat de conversieopties voor de codering niet zijn ontworpen om binaire bestanden te wijzigen, maar alleen platte tekstbestanden. Het gebruik van dos2unix/unix2dos op binaire bestanden kan leiden tot gegevensbeschadiging.
Voorbeelden van gebruik stap voor stap uitgelegd
Laten we eens een aantal praktische voorbeelden bekijken om de meest voorkomende gevallen, maar ook enkele geavanceerde gevallen, te illustreren:
- Converteer een bestand en overschrijf:
dos2unix documento.txt
Met deze opdracht wordt het bestand verwerkt, worden de CR-tekens uit elke regel verwijderd en wordt het resultaat naar hetzelfde bestand geschreven. - Genereer een nieuw bestand zonder het origineel te wijzigen:
dos2unix -n entrada.txt salida.txt
De conversie wordt opgeslagen in “output.txt”. - Converteer meerdere bestanden tegelijk:
dos2unix archivo1.txt archivo2.txt archivo3.txt - Forceer de conversie van een bestand dat begint met een koppelteken:
dos2unix -- -foo.txt - Bestanden in een directory recursief converteren:
find . -name '*.txt' -print0 | xargs -0 dos2unix
Hiermee worden alle .txt-bestanden in de mappenstructuur vanaf de huidige directory naar beneden geconverteerd. - Bestanden converteren met specifieke codering:
dos2unix -iso -n origen.txt destino.txt
Converteert tussen een DOS-codepagina en de ISO-8859-1-standaard. - Detecteren en weergeven welke bestanden geconverteerd moeten worden:
dos2unix -ic *.txt
Geeft alleen bestanden weer die DOS-regeleinden bevatten.
Hoe zit het met binaire bestanden?
Standaard negeren dos2unix en unix2dos automatisch binaire bestanden om onbedoelde beschadiging te voorkomen. Als u de conversie om welke reden dan ook wilt forceren, kunt u de parameter -f gebruiken . Dit wordt echter afgeraden , omdat niet-tekstbestanden hierdoor onbruikbaar kunnen worden.
Symbolische links en mappen beheren
Standaard wijzigen deze commando's geen symbolische links of mappen. Ze bieden echter opties zoals -F (symbolische links volgen en hun bestemmingen converteren), -R (symbolische links vervangen door de geconverteerde bestanden) of -S (symbolische links negeren, wat de standaardinstelling is).
Opties voor bekijken en debuggen
Als je wilt weten welk formaat een bestand heeft, of hoeveel regeleinden van elk type het bevat, kun je de optie -i (of –info ) gebruiken:
dos2unix -i archivo.txtGeeft gedetailleerde informatie weer over regeleinden en bestandstype.
Door bepaalde vlaggen toe te voegen, kunt u aangepaste informatie krijgen (bijvoorbeeld alleen bestanden met CRLF, alleen Unix-type sprongtelling, enz.).
Conversiemodi: ascii, iso, 7bit, mac
- ascii (standaard): Converteert alleen regeleinden. Het is de veilige optie voor UTF-8-bestanden.
- iso: Voert conversie uit tussen DOS-codetabellen en de ISO-8859-1-standaard. Handig voor oude of meertalige bestanden.
- 7bit: Verwijdert 8-bits tekens, wat handig is voor zeer oude systemen of systemen die extreme compatibiliteit vereisen.
- mac: Converteert tussen klassieke Mac- en Unix-formaten.
Deze modi kunnen worden gecombineerd met andere opties om verschillende bestandstypen te converteren, afhankelijk van de behoeften van de gebruiker.
Werken met scripts en alternatieve opdrachten
Als dos2unix/unix2dos niet op uw systeem is geïnstalleerd of als u de conversie handmatig (of in scripts) moet uitvoeren, zijn er verschillende alternatieven met behulp van klassieke Unix-opdrachten:
- Gebruik van sed:
sed 's/\r$//' fichero.txt(de ^M wordt ingevoerd met CTRL+V CTRL+M). - In moderne GNU staat:
sed 's/\x0D$//' fichero.txt. - Converteer van Unix naar DOS met sed:
sed 's/$/\r/' fichero.txt. - Gebruik van tr:
tr -d '\r' < input.file > output.file. - Met Perl:
perl -pi -e 's/\r\n/\n/g' input.file.
Deze methoden zijn handig als u bepaalde programma's niet hebt geïnstalleerd of als u een snelle oplossing nodig hebt op een beperkt systeem.
Conversievoorbeelden met verschillende coderingen
De vele opties in dos2unix en unix2dos maken het mogelijk om een breed scala aan scenario's te verwerken. Laten we eens een paar voorbeelden bekijken die illustreren hoe je met specifieke behoeften kunt omgaan:
- Van Windows UTF-16 (met BOM) naar Unix UTF-8:
dos2unix -n in.txt out.txt - Van Windows UTF-16LE (geen BOM) naar Unix UTF-8:
dos2unix -ul -n in.txt out.txt - Van Unix UTF-8 naar Windows UTF-8 (zonder BOM):
unix2dos -m -n in.txt out.txt - Van Unix UTF-8 naar Windows UTF-16:
unix2dos < in.txt | iconv -f UTF-8 -t UTF-16 > out.txt - Van Windows 1252 naar Unix Latin-1:
dos2unix -1252 -n in.txt out.txt - Van Unix Latin-1 naar DOS 850:
unix2dos -850 -n in.txt out.txt
In situaties waarin u moet converteren tussen ongebruikelijke codepagina's of bestanden met internationale tekens, kunt u dos2unix/unix2dos combineren met andere hulpprogramma's zoals iconv om opnieuw te converteren tussen verschillende coderingen vóór of na het wijzigen van regeleinden.
Bulkconversie- en automatiseringsscripts
Een van de sterke punten van deze opdrachten is hun integratie in scripts en geautomatiseerde omgevingen. Als u alle .txt-bestanden in een map (en submappen) wilt converteren, kunt u de gebruikelijke shell-opdrachten gebruiken:
- Op Unix:
find . -name '*.txt' -print0 | xargs -0 dos2unix - Op ramen CMD:
for /R %G in (*.txt) do dos2unix "%G" - En PowerShell:
get-childitem -path . -filter '*.txt' -recurse | foreach-object {dos2unix $_.Fullname}
In Unix kun je met -print0 en -0 bestandsnamen met spaties, accenten of aanhalingstekens correct verwerken.
Omgevingsvariabelen en regionale aanpassingen
Met dos2unix/unix2dos kunt u de taal en lokalisatie aanpassen met behulp van verschillende omgevingsvariabelen:
- TAAL: Selecteer de primaire taal. Voorbeeld:
export LANG=es_ESvoor Spaans uit Spanje. - TAAL: Geeft een lijst met voorkeurstalen weer. Voorbeeld:
LANGUAGE=es:en. - DOS2UNIX_LOKALE IR: Definieert het pad naar de taalbestanden van het programma.
Deze opties zijn vooral handig in internationale omgevingen of omgevingen met meerdere gebruikers.
Afsluit-, fout- en retourberichten
Na afloop retourneert het programma 0 als alles goed is gegaan of 1 als er een fout is opgetreden die niet gerelateerd is aan het besturingssysteem. In de stille modus ( -q ) blijft de retourwaarde nul, tenzij er een fout is in de parameters of de opties onjuist zijn gebruikt.
Verder dan dos2unix en unix2dos: andere hulpprogramma's en documentatie
Voor specifieke gevallen met betrekking tot de conversie van tekstbestanden kunt u andere commando's en programma's raadplegen, zoals `file` , `iconv` , `find` of `xargs` . Al deze programma's kunnen worden gecombineerd om robuuste oplossingen te creëren die volledig zijn afgestemd op de behoeften van elk project.
Als u dieper wilt ingaan, zijn hier enkele nuttige bronnen:
dos2unix/unix2dos installeren op belangrijke systemen
In de meeste Linux-distributies en Unix-omgevingen kunnen deze opdrachten eenvoudig worden geïnstalleerd:
- Debian/Ubuntu:
sudo apt-get install dos2unix - CentOS/Red Hat:
sudo yum install dos2unix - Arch Linux:
sudo pacman -S dos2unix
Op systemen als Ubuntu bijvoorbeeld, kunt u, als u zoekt naar "dos2unix" of "unix2dos" en deze opties zijn niet beschikbaar, eenvoudigweg het overeenkomstige pakket installeren (voorheen was dit "sysutils"). In Windows-omgevingen zijn er draagbare versies of kunt u emulators zoals Cygwin of WSL gebruiken.
Gepassioneerd schrijver over de wereld van bytes en technologie in het algemeen. Ik deel mijn kennis graag door te schrijven, en dat is wat ik in deze blog ga doen: je de meest interessante dingen laten zien over gadgets, software, hardware, technologische trends en meer. Mijn doel is om u te helpen op een eenvoudige en onderhoudende manier door de digitale wereld te navigeren.