私は、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の問題がありますか?
'ReplaceScript'のパターンに'/'がありますか?実際のサンプルを貼り付けると役立ちます。 – codeforester
私のために働くようですが、それは空白または行末の問題かもしれませんか? – jerry
それも再現できません。それとは別に、あなたはそのハッシュバン行を必要としません。これは 'sed -f script'の代わりに'。/ script'のように呼び出すことができるsed実行可能ファイルを作成したい場合ですが、 'sed- -i'なので、あなたはそれが欲しいとは思わない。 –