^M
私は、Windows時代のアーティファクトであるクラシックで終わるファイルをたくさん持っています。これはすべてソース コードであるため、実際には git はこれらのファイルが変更されたと認識しているため、これらの厄介な行を完全に削除したいと考えています。
これが私が作成したものです:
sed -i 's/^M//g' file
しかし、それはうまくいきません。もちろん、リテラル^M
ではなく^V^M
(ctrl V、ctrl M) を入力しました。vimでは動作します(:%s/s/^M//g
)。次のように変更すると:
sed -i 's/^M/a/g' file
これも機能します。つまり、すべての行が 'a' で終了します。これを行うためにも機能します:
sed -i 's/random_string//g' file
のどこrandom_string
に存在しますかfile
。したがって^M
、任意の文字に置き換えることができ、行を削除することはできますが、削除することはできません^M
。なんで?
注: 単に削除するだけで、別の目に見えない文字などに置き換えないことが重要です。また、二重実行を避け、任意の文字列を追加して後で削除することも避けたいと思います。これが失敗する理由を理解したい(ただし、エラーは報告されない)。