web-dev-qa-db-ja.com

一連のファイルの改行を変換する方法は?

Windowsの改行(CRLF)またはUnixの改行(LF)のいずれかを含むファイルのセットがあります。

すべてのファイルのすべての改行をMacの改行(CR)に変換するにはどうすればよいですか?

2
Thangaraj

質問には明示的には書かれていませんが、テキストファイルを意味し、行区切り文字の形式を変換する必要があると思いますか? 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
Gordon Davisson

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
1
Lri