2013-02-22 7 views
6

の終わりにM ^追加:Unixのスクリプトは、私は次のことを行いUnixのシェルスクリプトを持っている各ライン

  1. は、ファイルのバックアップ
  2. がファイル
にいくつかのテキストを追加作成します

#2でテキストを挿入すると、ファイルのすべての行に^ Mが追加されます。例えば

echo " a" >> /cust/vivek.txt 
echo " b" >> /cust/vivek.txt 

vi vivek.txt 
abc^M 
bcd^M 
a^M 
b^M 

これを回避するための任意の方法は?

おかげで、

のVivek

+0

では、Windowsマシン上でこのファイルを作成し、UNIX/Linuxマシン上でそれを転送しましたテキストは、スクリプト –

+3

でファイルに追加する方法を私たちに示して? MS-DOSおよびLinux/Unix環境では、行の終わりが異なって解釈されます。 MS-DOSでは、行末は改行文字とキャリッジリターンで示されますが、Unixでは新しい改行文字は行末を示します。これは、MS-DOSとUnix/Linuxの間の転送モードに注意しないと、^ M文字が表示されます。 – Incognito

+0

これを解決するためにWindowsマシンからのみベースファイルをコピーしましたか? –

答えて

8

私はecho^M文字を生成することができかどうかはわかりませんが、あなたはこのように、あなたのファイルにdos2unixを実行することによって、それらを削除することができます。

dos2unix /cust/vivek.txt 
+0

ありがとう、dos2unixはやりました –

+0

dos2unixについて知りませんでした。私にとっては魅力的でした!乾杯 – ConMan

+1

'echo -e" \ r "'はそのようなものを作ります –

2

私はこれがあなたのvi設定のアーティファクトではなく、連結することも疑います。

cat -v -e filename 

ショーを何?このコマンドは、あなたのファイルをダンプし、制御文字に印をつけて、というファイルが本当にであることを明確にします。 this Superuser question/answer setも参照してください。

+0

-v = LFDとTABを除く^とM-表記を使用します。 -E =各行の最後に$を表示します。 -e = -vEと同等です。 So -v -e = -v -vE; 冗長? "-v -e"の代わりに "-e"だけを使うべきではありませんか? –

3

^Mは、キャリッジリターンである、とするとき、ファイル一般的に見られていますWindowsからコピーされます。使用:

od -xc filename 

これは、ファイルの外観を低レベルで示すものです。ファイルがWindowsから来ない場合は、端末の設定が正しく翻訳されていない可能性があります。 TERM環境変数が正しいことを確認してください。

ファイルをWindowsから来た場合は、使用dos2unixsed 's/\r//' file > file.new

+0

おかげでdos2unixは助けました) –

2

^Mは、それがWindowsで使用した場合、あなたのファイルを入力したメタ文字です。

dos2unixコマンドでこれを解決できます。

dos2unix <filename> 
関連する問題