У меня есть набор файлов либо с новыми строками Windows (CRLF
), либо с новыми строками Unix (LF
).
Как я могу преобразовать все новые строки во всех файлах в новые строки Mac (CR
)?
Концы строк 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
Вопрос прямо не говорит, но я предполагаю, что вы имеете в виду текстовые файлы, и вам нужно преобразовать формат разделителя строк? 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 - нет (он использует разделители строк, а не терминаторы), поэтому этот сценарий определяет, когда он фактически переводится, и удаляет последний разделитель.