4

非常に一般的な問題ですが、sed では回避できません。

myfile.txtリストを作成するために一度に実行されるスクリプトファイル(コマンドのバッチ)があります。^Mバッチ操作を実行しているときに、各行の末尾に改行が追加されているため、コマンド ライン インターフェイスがコマンドを解析できないことを明確に示しています。

私はそれsedを行うための最良の方法だと思いました.私は試しました:

    sed -e 's/^M/d' myfile.txt > myfile1.txt
    mv myfile1.txt myfile.txt

うまくいきませんでした。私もこれを試しましたが、うまくいきませんでした:

    sed -e 's/^M//g' myfile.txt > myfile1.txt
    mv myfile1.txt myfile.txt

sedそれから、行頭のM文字としてそれを取っているのではないかと思ったので、結果はありません。だから私は試しました:

    sed -e 's/\^M//g' myfile.txt > myfile1.txt
    mv myfile1.txt myfile.txt

しかし、変化はありません。私がやっている基本的な間違いはありますか?下手なのでアドバイスお願いしsedます。

viエディターでファイルを開き、コマンドモードでこれを実行するという解決策を見つけました:

    :set fileformat=unix
    :w

でも入れたいsed

4

3 に答える 3

11

^M文字通りではありません^M。に置き換え^Mます\r。に対して同じ表現を使用できますtr。これら 2 つのコマンドはどちらもキャリッジ リターンを削除します。

tr -d '\r'  < input.txt > output.txt
sed -e 's/\r//g' input.txt > output.txt
于 2012-11-23T10:23:10.197 に答える
1
sed -e 's/^M/d' myfile.txt

次の意味があります [ /\^M/ と同じ]:行の最初の文字が M の場合は、その行を削除し、そうでない場合は出力して次へ渡します。. また、s[検索コマンド] に /old/new/ という 2 つのセパレーターを挿入する必要があります。

これはあなたを助けるかもしれません。

于 2012-11-23T10:31:20.113 に答える
1

遅れましたが、後世のためにここにあります:LinuxまたはUnixでのsed Delete / Remove ^M Carriage Return (Line Feed / CRLF)

上記の質問に答える要点: ^M を取得するには、CTRL+V に続けて CTRL+M を入力します。つまり、カラット記号と大文字の M だけを入力しないでください。機能しません。

于 2016-12-05T09:36:00.453 に答える