1

У меня есть набор файлов либо с новыми строками Windows (CRLF), либо с новыми строками Unix (LF).

Как я могу преобразовать все новые строки во всех файлах в новые строки Mac (CR)?

2 ответа2

2

Концы строк CR в основном использовались в Mac OS 9 и более ранних версиях. OS X использует LF окончания строк в большинстве мест.

Некоторые из методов ниже добавляют новую строку в конец файлов, которые еще не заканчиваются новой строкой. Некоторые не работают в Windows, или если окончание строки по умолчанию не LF.

CRLF в LF:

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

LF в CRLF:

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

LF в CR:

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

CR to LF:

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

CRLF или CR к LF:

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

CRLF или LF в CR:

ruby -i -ne 'print $_.chomp+"\r"' *.txt
2

Вопрос прямо не говорит, но я предполагаю, что вы имеете в виду текстовые файлы, и вам нужно преобразовать формат разделителя строк? OS X не поставляется с инструментами конвертации файлов командной строки, вы должны собрать их самостоятельно. Perl хорош для таких утилит Q & D:

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

или, чтобы преобразовать на месте:

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

Примечание: этот скрипт немного сложнее, чем, вероятно, должен быть, потому что он написан для работы как с форматом ПК (терминаторы строки CRLF), так и с файлами unix (терминаторы LF), и оставляет файлы, которые уже находятся в старом только традиционный формат MacOS (разделители CR между строками). Кроме того, форматы ПК и Unix помещают терминатор после последней строки, а формат Mac - нет (он использует разделители строк, а не терминаторы), поэтому этот сценарий определяет, когда он фактически переводится, и удаляет последний разделитель.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .