web-dev-qa-db-ja.com

C#-Tectiaを使用してWindowsからUNIXにファイルを転送するときにctrl M文字を削除する方法

C#モジュールで、Tectiaを使用してWindowsからUnixにファイルを転送したいと思います。しかし問題は、これらのファイルが転送され(AsciiまたはBinaryモードの両方)、VIエディターを使用して開かれると、^ M文字が取得されることです。私はこれについて検索しましたが、解決策は、utilitesを使用してファイルが転送された後にこれらの^ M文字を削除することです。これらの^ M文字が最初に表示されない方法はありますか?これらのファイルを送信する前にコードで回避策をとるオプションはありますか?

13
Ravi Goklani

みんなの助けに感謝します。この問題は回避策を使用して解決しました。 WindowsはCR + LF(\ r\n)を行末として使用し、UnixはLF(\ n)を行末として使用します。Windowsファイルを取得して、オカレンスを置き換えましたユーティリティ自体なしでコード自体にCR + LF(\ r\n)とLF(\ n)を追加しました。これにより、ファイルはUNIXシステムと互換性があり、SFTPを使用してファイルを転送し、^ M文字なしでUnixで動作しました。

1
Ravi Goklani

Viエディターでそれを削除する方法:

  • :%s/を押してから ctrl+V その後 ctrl+M。これは^M
  • 次に//g(次のようになります::%s/^M ) 押す Enter すべて削除されます。

幸運を!

21
Rajesh

dos2unix をインストールして使用できます。インストール後、次を実行してください:

>dos2unix yourfile.txt 
14
alfasin

^M文字を削除するだけの場合(\nで置き換えないでください):

sed -i -e 's/\r//g' yourfile.txt

それらを\nに置き換える場合:

sed -i -e 's/\r/\n/g' yourfile.txt
13
JellicleCat

削除するもう1つのトリック Ctrl+M viエディター:

:%s/^V^M//g

削除するためのより多くのトリックについて Ctrl+M 文字

5
Vinoth

ターミナルで以下を実行してみてください(最初にインストールする必要があるかもしれません):

fromdos <your-file>
3
Quetzalcoatl

試す

tr -d '\015' <INPUT_FILE > OUTPUT_FILE
1
Akshay
:%s/^V^M//
  1. gはまったく必要ありません。

  2. %s-置き換えたいテキストを見つけて置き換えます

  3. ^V^Mを「ダブルスラッシュの後に置く」に置き換える場合、何も置き換えない場合は空のままにします。

1

私にとっては、これが機能する唯一のものです.. unix2dosでも何でもありません...

sed -e 's/\ x0D // g'

参照:

印刷文字ではなく制御文字である16進数の0aは、改行と呼ばれます。

16進数の0dはキャリッジリターンと呼ばれます。

0
RmccurdyDOTcom

tr '\015' '\n' < /tmp/file-with-ctrlm.txt > /tmp/no-ctrlm.txt

  • このコマンドは、ASCII CtrlMのコードを使用し、すべてのCtrlMを改行文字に置き換えます。
  • Ctrl-V、Ctrl-Mを回避し、Macでも動作します。
0
Niket