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 OSCR+LF
w systemach Microsoft Windows, DOS (MS-DOS, IBM PC DOS, itp.), OS/2, Symbian OS, Palm OSCR
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