2017-04-11 3 views
-1

私は、100個のソースファイルと22,000個の変数名を置き換えます。sedはスクリプトを読むとき以外は正常に実行されます:代替コマンドの「bad」フラグ: 's'

#! /usr/bin/sed -f 
s/foo1/bar1/g 
s/foo2/bar2/g 
s/foo3/bar3/g 

ツリー内のすべての.cファイルの変数名を置き換える必要があります。次のような置換変数を持つsedスクリプトを作成します。検索対象のベースディレクトリで、私は、次のコマンドを使用しました:

find . -type f -name "*.c" -exec sed -i '' -f ./ReplaceScript {} + 
sed: 1: ./ReplaceScript: bad flag in substitute command: 's' 

シングル代替コマンド意図した通りの仕事をしてくれました:

find . -type f -name "*.c" -exec sed -i '' 's/foo1/bar1/g' {} + 

私の質問:どのように私は私の悪いフラグを修正しますか?

更新: 1 DOSキャリッジ代わりに返す:これは二つの問題であることが判明

find . -type f -name "*.c" -exec /usr/local/bin/sed -i -f ./ReplaceScript {} + 
/usr/local/bin/sed: file ./ReplaceScript line 1: unknown option to `s' 

更新

:GNUは異なるエラーで結果をsedの使用

Unixのもの。 2. little endian UTF 16ファイル形式。sedが正しく解析されるためには、ASCIIでなければなりません。

更新2 重複していますか?別の質問に対する同じ答え、上に追加のUTF16の問題がありますか?

+3

'ReplaceScript'のパターンに'/'がありますか?実際のサンプルを貼り付けると役立ちます。 – codeforester

+0

私のために働くようですが、それは空白または行末の問題かもしれませんか? – jerry

+1

それも再現できません。それとは別に、あなたはそのハッシュバン行を必要としません。これは 'sed -f script'の代わりに'。/ script'のように呼び出すことができるsed実行可能ファイルを作成したい場合ですが、 'sed- -i'なので、あなたはそれが欲しいとは思わない。 –

答えて

1

this comment に基づいて、ファイルはUTF-16でエンコードされ、リトルエンディアン形式でバイトオーダーマークが付けられています。 ASCIIに変換するには、次のコマンドを実行してみてください。

iconv -f UTF-16 -t ASCII ReplaceScript > ReplaceScript-new 

キャリッジリターンもあります。 sedは私のマシンでは問題ないと思われますが、問題が起きた場合はdos2unixで簡単に取り除くことができます。

+0

@ jerryはい、うまく動作します。あなたの答えは現時点では投票できません。クレジットは新しいユーザーではありません。 – Koyovis

1

問題はスクリプトファイルのDOSキャリッジリターンにありました。 DOS/Windowsのキャリッジリターンを使用することが判明したExcelシートからSpace Delimited Text .prnをエクスポートしていました。これらはテキストエディタには表示されません。これは、スクリプトファイルが^ Mとして表示されるときだけです。そして、それらの小さな狂った仲間たちは、UNIXのsedがそれらを解釈するときに問題を引き起こします。

このフォーラムの他の場所に掲載されているソリューション:dos2unixをインストールします。コマンドファイル形式でvimにunixへの変換を指示する。パターンを置き換える。彼らはすべて私のために働かなかった。私は今もフォームExcelをエクスポートし、TextWranglerに貼り付けます。

私が掲示したコードが何の問題も示さなかったことを示唆するコメントは、解決策につながったものでした。このフォーラムで私の最初の投稿に貢献してくれてありがとう。

+0

何かがオフに見えます。明らかに、上記の私のコメントによれば、私はそれが関連する行末である可能性を考慮した。 OS Xのさまざまな行末でテストしたところ、再現できませんでした。そのことと標準ツールのいくつかで問題を解決できないという事実の間には、説明に欠けているものがあるようです。 – jerry

+0

私は同意します。何か他のものは間違っているようですが、私はそれを特定できません:Excelからエクスポートした後、すべてがvimにロードされたときに順番に見えますが、sedはまだ '?' 1行目: – Koyovis

+0

'sed:1:./Replace_8_7:無効なコマンドコード? '。 OSXとGNU sedの両方がこの疑問符を見る唯一のものであり、私はそれを特定することもツールを使ってそれを可視化することもできません。 – Koyovis

関連する問題