C#モジュールで、Tectiaを使用してWindowsからUnixにファイルを転送したいと思います。しかし問題は、これらのファイルが転送され(AsciiまたはBinaryモードの両方)、VIエディターを使用して開かれると、^ M文字が取得されることです。私はこれについて検索しましたが、解決策は、utilitesを使用してファイルが転送された後にこれらの^ M文字を削除することです。これらの^ M文字が最初に表示されない方法はありますか?これらのファイルを送信する前にコードで回避策をとるオプションはありますか?
みんなの助けに感謝します。この問題は回避策を使用して解決しました。 WindowsはCR + LF(\ r\n)を行末として使用し、UnixはLF(\ n)を行末として使用します。Windowsファイルを取得して、オカレンスを置き換えましたユーティリティ自体なしでコード自体にCR + LF(\ r\n)とLF(\ n)を追加しました。これにより、ファイルはUNIXシステムと互換性があり、SFTPを使用してファイルを転送し、^ M文字なしでUnixで動作しました。
Viエディターでそれを削除する方法:
:%s/
を押してから ctrl+V その後 ctrl+M。これは^M
//g
(次のようになります::%s/^M
) 押す Enter すべて削除されます。幸運を!
dos2unix をインストールして使用できます。インストール後、次を実行してください:
>dos2unix yourfile.txt
^M
文字を削除するだけの場合(\n
で置き換えないでください):
sed -i -e 's/\r//g' yourfile.txt
それらを\n
に置き換える場合:
sed -i -e 's/\r/\n/g' yourfile.txt
ターミナルで以下を実行してみてください(最初にインストールする必要があるかもしれません):
fromdos <your-file>
試す
tr -d '\015' <INPUT_FILE > OUTPUT_FILE
:%s/^V^M//
g
はまったく必要ありません。
%s
-置き換えたいテキストを見つけて置き換えます
^V^M
を「ダブルスラッシュの後に置く」に置き換える場合、何も置き換えない場合は空のままにします。
私にとっては、これが機能する唯一のものです.. unix2dosでも何でもありません...
sed -e 's/\ x0D // g'
参照:
印刷文字ではなく制御文字である16進数の0aは、改行と呼ばれます。
16進数の0dはキャリッジリターンと呼ばれます。
tr '\015' '\n' < /tmp/file-with-ctrlm.txt > /tmp/no-ctrlm.txt