2009-10-05 20 views
10

私はthis questionとは逆に、Unixの行末をWindowsの行末に置き換えようとしています。use SQL Server bcp over samba to import the fileです。私はsedがインストールされていますが、dos2unixはインストールされていません。私は例を逆にしようとしたが役に立たなかった。Unixファイルで nを r nに置き換えてください。

ここで私が使用しているコマンドです。

sed -e 's/\n/\r\n/g' myfile 

私はこれを実行し、その後\nがあるように使用場所を\r\nを見ることを期待し、od -c myfileを走りました。しかし、まだすべてが\nです。 (または、少なくとも彼らは表示されます。odの出力は私の画面バッファーをオーバーフローさせるので、ファイルの先頭を見ることはできません)。

私が間違っていることを理解することができませんでした。助言がありますか?あなたがそれをしようとした場合、このよう

cat myfile | sed 's/\n/\r\n/g' > myfile.win 

はあなただけのコンソール出力に代替品を作る私の理解から、動作します

+0

コンパイラがありません。 –

+0

どのような種類のコンパイラですか? –

+0

ファイルの先頭を表示するには od -c filename | less –

答えて

11
  • マシンにdos2unixを取得する際に問題があったとは何ですか?
  • 作業しているプラ​​ットフォームは何ですか?
  • GNU sedまたは通常の非GNU sedをお持ちですか?
  • Solarisの

/usr/bin/sedが必要です。私は制御V制御Mを入力して、 '^ M' を入力し

sed 's/$/^M/' 

。 '$'は行の最後にマッチし、行末をcontrol-Mに置き換えます。あなたもそれをスクリプトすることができます。 -Mを制御するために「 \\rを」「 \r」を展開したりする sedを期待

メカニズムは、せいぜい、プラットフォーム固有のことを行っています。

+0

これはトリックでした。私はそこにdos2unixを入手できるかもしれませんが、私は既存のソフトウェアを使用したいと考えていました。私はAIXにいる。 GNU版ではないと思います。これで私は以前にviでcontrol-v control-mトリックを使っていましたが、それを考えていたはずです。ありがとう。 –

-1

はたぶん、あなたは、この場合のmyfile.winには、出力をファイルにリダイレクトする必要があり、あなたが望むものに名前を変更することができます。スクリプト全体は、(ファイルのこの種の完全なディレクトリ内で実行されている)のようになります。

#!/bin/bash 
for file in $(find . -type f -name '*') 
do 
    cat $file | sed 's/\n/\r\n/g' > $file.new 
    mv -f $file.new $file 
done 
+1

-1。私のために働かない。 – Peter

+0

よくプラットフォーム固有ですが、Jonathan Lefflerの回答はより良い – Juparave

3

あなたは-eオプションは必要ありません。

$は、エンドライン文字と一致します。このsedコマンドは、行の終わりまでに\r文字を挿入します:

sed 's/$/\r/' myfile 
+1

提案していただきありがとうございますが、なんらかの理由でこれはファイルの最後にrを貼り付けるだけです。 –

+0

GNU sedの情報マニュアルによると、「ここで紹介したすべてのエスケープは、GNU拡張であり、\ n 'は例外です。 – hlovdal

+0

Unixのフレーバーを指定しないという私のせいです。私はAIXを使用しています。私は\ nの代わりに$を検索するべきであることを最初に指摘してくれたので+1しました。 –

13

このに直面したとき、私はシンプルperlワンライナーを使用します。sed行動が変化するので

perl -pi -e 's/\n/\r\n/' filename 

、と私は、この作品を知っています。ファイルが混在モードEOLがある可能性がありますので、その後は\r\r\nをbecommingいくつかの線で終わるリスクためだけ\nの前で(別名^M、ジョナサン・レフラーの回答を参照してください)\rを追加

+0

ええ、これは携帯用の最適なオプションです。上記の手で入力された^ Mと信頼できない\ rの展開はショーストッパーです。 –

1

は安全ではありません。安全なことはまずすべての\ r文字を削除してからの前に\rを挿入してください。

#!/bin/sh 
sed 's/^M//g' ${1+"[email protected]"} | sed 's/$/^M/' 

^Mに更新されました。使用

0

てみ:

echo " this is output" > input 
sed 's/$/\r/g' input |od -c 
1
sed 's/\([^^M]\)$/\0^M/' your_file 

これは\ nの前には\ rが存在しないときにのみ、\ rを挿入を確認します。これは私のために働いた。

関連する問題