Linuxでキャリッジリターンを削除するには、次のコマンドを実行します。
sed -i 's/\r//g' <file>
しかし、これはMac OS Xでは機能しません。次のように$
を付加する必要があります。
sed -i $'s/\r//' <file>
また、「g」も不要です。
これはなぜですか?
これは、Linuxのsed
とは異なり、OSXで使用可能なsed
が\r
を特殊文字として認識しないためです。
あなたはそれをあなたが使っている方法で使うことができます:
sed -i.bak $'s/\r//' file
またはこれ:
sed -i.bak "s/$(printf '\r')//" file
または、OSXでtr
を使用できます。
tr -d '\r' < file
別のポータブルで柔軟なソリューションは次のとおりです。
sed -i.bak $'s/\x0D//' file
戻り文字にはASCIIコード0Dがあるためです。\x置換はsedのすべてのPOSIXリリースで機能し、ASCIIコードを検索することにより、他の問題のある文字と一致させることができます。他の有効な置換を見つけるには、man re_format
を実行するか、 ASCIIテーブル を表示します。
キャリッジリターン(\ r)で行が終了しないため、Linuxでは最後の/ gが必要です。多くのWindowsの「プレーンテキスト」エディター(メモ帳など)は、キャリッジリターンと改行(\ r\n)の両方で各行を終了しますが、OS 9( ca。2001 )以前のMacは各行を終了します単一の\ rを含む「プレーンテキスト」ファイルの例。 Windowsファイルをクリーンアップする場合、* Xシステムでは/ gは必要ありません。 macOSを使用している場合、macOSは単一の\ rを行末として認識するため、/ gも必要ありません。
(古いMacファイルを読み取るLinuxシステムは、すべてのテキストが1つの非常に長い行にあると見なし、最初の\ rのみを変換します。Linuxシステムを使用していて、古いMacファイルからの改行を保持する必要がある場合は、
sed -i.bak $'s/\x0D/\x0A/g' file
各\ rを\ nに変換します。)