Jak konwertować znaki nowej linii w zestawie plików?

1

Mam zestaw plików z nowymi wierszami Windows ( CRLF ) lub Unix newlines ( LF ).

Jak mogę przekonwertować wszystkie znaki nowej linii we wszystkich plikach na nowe linie Mac ( CR )?

Thangaraj
źródło
Myślę, że musisz dokładniej określić, jakie typy plików masz. Czy próbujesz to zrobić programowo lub po prostu w powłoce systemu operacyjnego?
Czy chcesz to zrobić na mac lub na unixie?
andcoz
Mam setki plików .c / .h. Chcę przekonwertować wszystkie te pliki na format Mac OS. Jestem w porządku z każdym ze sposobów, ale moim ostatecznym celem jest przekonwertowanie wszystkich plików na format plików mac.
Thangaraj
byłoby dobrze, gdyby był w mac.
Thangaraj
3
Wyszukaj „dos2unix” na superuser.com. Głosowanie w celu migracji. (A tak przy okazji, systemy MacOSX nie używają innego formatu niż Unix ... musiałbyś cofnąć się o wiele lat w systemach operacyjnych Macintosh, aby znaleźć czas, w którym użyli innego formatu niż MS / DOS i UNIX. )
Ether

Odpowiedzi:

2

Pytanie nie mówi wprost, ale zakładam, że masz na myśli pliki tekstowe i musisz przekonwertować format ogranicznika linii? OS X nie jest dostarczany z narzędziami konwertera plików wiersza poleceń, musisz je sam zbudować. Perl jest dobry dla takich narzędzi jak Q & amp; D:

perl -pe 'if (s/\r?\n/\r/g) {$f=1}; if ($f&&eof()) {s/\r\z//}' PCfile.txt >Macfile.txt

lub, aby dokonać konwersji na miejscu:

perl -pe 'if (s/\r?\n/\r/g) {$f=1}; if ($f&&eof()) {s/\r\z//}' -i convertfile.txt

Uwaga: ten skrypt jest nieco bardziej skomplikowany, niż prawdopodobnie musi być, ponieważ jest napisany do pracy zarówno w formacie PC (terminatory linii CRLF), jak i unixowe (terminatory LF), i pozostawia pliki, które są już w starym tradycyjny format MacOS (separatory CR między liniami) sam. Ponadto formaty PC i unix umieszczają terminator po ostatniej linii, podczas gdy format Mac nie (używa separatorów linii, a nie terminatorów), więc ten skrypt wykrywa, kiedy faktycznie się tłumaczy, i usuwa ostatni separator.

Gordon Davisson
źródło
2

Zakończenia linii CR były najczęściej używane w systemie Mac OS 9 i wcześniejszych. OS X używa końcówek linii LF w większości miejsc.

Niektóre z poniższych metod dodają nową linię do końca plików, które nie kończą się znakiem nowej linii. Niektóre nie działają w systemie Windows lub jeśli domyślne zakończenia linii nie są LF.

CRLF do LF:

dos2unix *.txt
sed -i '' $'s/\r//' *.txt
tr -d '\r'

LF do CRLF:

unix2dos *.txt
recode ../crlf *.txt

LF do CR:

unix2mac *.txt
awk 'BEGIN{ORS="\r"};1'
tr '\n' '\r'

CR do LF:

mac2unix *.txt
awk 'BEGIN{RS="\r"};1'

CRLF lub CR do LF:

ruby -e 'print gets(nil).gsub /\r\n?/,"\n"'
ruby -i -pe 'BEGIN{$/="\r"};$_=$_.sub("\n","").sub("\r","\n")' *

CRLF lub LF do CR:

ruby -i -ne 'print $_.chomp+"\r"' *.txt
Lri
źródło