Windowsの改行(CRLF
)またはUnixの改行(LF
)のいずれかを含むファイルのセットがあります。
すべてのファイルのすべての改行をMacの改行(CR
)に変換するにはどうすればよいですか?
質問には明示的には書かれていませんが、テキストファイルを意味し、行区切り文字の形式を変換する必要があると思いますか? 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形式ではターミネータが配置されないため(ターミネータではなく行区切り文字が使用されます)、このスクリプトは実際に変換されていることを検出し、最後の区切り文字を削除します。
CR行末は、主にMac OS9以前で使用されていました。 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