web-dev-qa-db-ja.com

Mac OS Xでsedを使用してキャリッジリターンを削除する

Linuxでキャリッジリターンを削除するには、次のコマンドを実行します。

sed -i 's/\r//g' <file>

しかし、これはMac OS Xでは機能しません。次のように$を付加する必要があります。

sed -i $'s/\r//' <file>

また、「g」も不要です。

これはなぜですか?

17
Gaurav Fotedar

これは、Linuxのsedとは異なり、OSXで使用可能なsed\rを特殊文字として認識しないためです。

あなたはそれをあなたが使っている方法で使うことができます:

sed -i.bak $'s/\r//' file

またはこれ:

sed -i.bak "s/$(printf '\r')//" file

または、OSXでtrを使用できます。

tr -d '\r' < file
32
anubhava

別のポータブルで柔軟なソリューションは次のとおりです。

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に変換します。)

8