Pracując na systemach typu Windows oraz Linux czasem możemy mieć problem z interpretacją plików tekstowych przez programy. Problemem jest fakt, że Linux i Windows inaczej zapisują i interpretują znak końca linii. W systemach Windows koniec linii oznaczany jest znakiem carriage return (powrót karetki). I tutaj powstaje problem. Aplikacje Windowsowe nie rozpoznają kodowania znaku końca linii spod systemów. Plik odczytany na Windowsie spod Linuksa nie będzie posiadał nowych linii.

Notatnik

Natomiast systemy typu Linux pokażą znak CR jako Ctrl-m (^M ). Najprostszą metodą konwersji plików pomiędzy systemami, będzie skorzystanie z komend dos2unix, unix2dos. Użycie poleceń jest bardzo proste:

dos2unix winfile.txt unixfile.txt
unix2dos unixfile.txt winfile.txt

Jeżeli nie posiadamy tych aplikacji, możemy pokusić się o napisanie prostych skryptów, które wykonają za nas to zadanie. Najprostszą metodą konwersji pliku z Windowsa do Linuksa będzie zastosowanie polecenia:

tr -d '\15\32' < winfile.txt > unixfile.txt

W ten sposób usuniemy z pliku znaki CR oraz Ctrl-z (^Z). W drugą stronę metoda ta nie zadziała. Aby konwertować pliki w obie strony możemy posłużyć się awk:

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt
awk 'sub("$", "\r")' unixfile.txt > winfile.txt

Jeśli w systemie mamy starą wersję awk, nasze skrypty mogą nie działać. Z pomocą przyjdzie nam Perl:

perl -p -e 's/\r$//' < winfile.txt > unixfile.txt
perl -p -e 's/\n/\r\n/' < unixfile.txt > winfile.txt

Kolejną metodą może być wykorzystanie seda:

sed -e 's/\r//' -i file
sed -e 's/$/\r/ -i file

Do tego zadania można też wykorzystać popularny edytor tekstu: Vim. Wystarczy otworzyć w nim plik a następnie wydać polecenie:

:set ff=dos
:set ff=unix

Jak widać rozwiązań jednego problemu jest wiele i na tym polega właśnie zaleta Linuksa.

  • zette

    A nie lepiej zamiast konwertowac tam i nazad korzystac pod wingroza z edytora tekstu innego niz notatnik?

    darmowy notepad++ nie ma ograniczen, ani co do kodowania, ani wielkosci pliku, a do tego kolorowanie skladni i jeszcze kilka innych ciekawych funkcjonalnosci.

  • W Gedit, Kwrite, Kate też możesz skonwertować. Ale nie o tym jest artykuł. Służy on do poznania Basha a nie aplikacji graficznych.

  • slotwek

    Bardzo fajny artykul i widac, ze autor zglebil temat. Mysle, ze moze mi sie to przydac – Wielkie Dzieki ;)

  • Mateusz

    AFAIR to w linuksie znakiem nowej linii jest właśnie nowa linia :P [n], w windozie cr i nl [nr], a w macach samo cr [r] (ww. powrót karetki)