我有一组带有 Windows 换行符 ( CRLF
) 或 Unix 换行符 ( LF
) 的文件。
如何将所有文件中的所有换行符转换为 Mac 换行符(CR
)?
答案1
问题没有明确说明,但我假设您的意思是文本文件,并且需要转换行分隔符格式?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
注意:此脚本可能比实际需要的要复杂一些,因为它既适用于 PC 格式(CRLF 行终止符),也适用于 unix 文件(LF 终止符),并且不会影响已经采用旧式传统 MacOS 格式(行间 CR 分隔符)的文件。此外,PC 和 unix 格式在最后一行后放置终止符,而 Mac 格式则不这样做(它使用行分隔符,而不是终止符),因此此脚本会检测实际翻译的时间,并删除最后一个分隔符。
答案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 转 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