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
)?
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
)?
Odpowiedzi:
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.
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