Konwersja znaków końca linii w plikach tekstowych

vi - konwersja znaków końca linii
vi – konwersja znaków końca linii

Rożne rodziny systemów operacyjnych używają rożnych znaków końca linii w plikach tekstowych. Otwierając w edytorze Vim plik ze znakami końca linii właściwymi systemom Windows na końcach linii zobaczymy tajemnicze znaki ^M. Jednak konwersja znaków końca linii w plikach tekstowych nie stanowi problemu.

Znaki końca linii

W plikach tekstowych opartych o standard ASCII używane są kombinacje znaków LF i CR. Możemy wyróżnić m.in. następujące rodzaje oznaczeń końca linii:

  • LF w systemach Unix i uniksopodobnych (Linux, OS X, FreeBSD, AIX), AmigaOS, RISC OS
  • CR+LF w systemach Microsoft Windows, DOS (MS-DOS, IBM PC DOS, itp.), OS/2, Symbian OS, Palm OS
  • CR w Mac OS do wersji 9, OS-9, ZX Spectrum

Znaki RS, 0x9B, LF+CR były stosowane w innych nierozwijanych już systemach operacyjnych.

LF – Line Feed (znak nowego wiersza / znak zmiany wiersza)
CR – Carriage Return (powrót karetki)
RS – Record Separator (0x1E)

W plikach z kodowaniem UTF mogą byś stosowane również inne znaki końca linii.

Za pomocą programu file w prosty sposób możemy sprawdzić sposób oznaczania końca linii w pliku.

$ file MacOS.txt Unix.txt Windows.txt
MacOS.txt:   UTF-8 Unicode text, with CR line terminators
Unix.txt:    UTF-8 Unicode text
Windows.txt: UTF-8 Unicode text, with CRLF line terminators

Konwersja znaków końca linii

Konwersji znaków końca linii możemy dokonać na wiele sposobów, np. za pomocą programów dos2unix (fromdos, d2u) i unix2dos (todos, u2d). Nazwa programu zdradza jego działanie. Użycie tych programów jest banalnie proste, jako jedyny argument wystarczy podać ścieżkę do konwertowanego pliku.
Do konwersji znaków końca linii można także wielu innych narzędzi między innymi: tr, col, recode, sed, perl.

Konwersja CRLF na LF (Windows → systemy uniksopodobne)

tr -d '\r' < windows.txt > unix.txt
col -b < windows.txt > unix.txt
perl -i -p -e 's/\r//' windows.txt
sed -i -e 's/\r//' windows.txt

Również w edytorze Vim możemy dokonać zamiany znaków końca linii. W tym celu należy wpisać polecenie i zatwierdzić następujące polecenie :s/^M$// aby uzyskać znak ^M należy użyć kombicacji klawiszy Ctrl + V i Ctrl + M

Konwersja LF na CRLF (systemy uniksopodobne → Windows)

perl -i -p -e 's|[\r\n]+|\r\n|g' unix.txt
sed -i -e 's/$/\r/' unix.txt

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

To prevent spam, URLs are not allowed in comments. All comments are moderated and subject to approval.
Aby zapobiec spamowi, adresy URL nie są dozwolone w komentarzach. Wszystkie komentarze są moderowane i podlegają zatwierdzeniu.