2009-05-12 11 views
1

申し訳ありませんが、これは簡単な質問ですが、このsedコマンドを機能させることはできません。私はテキストファイルを取得しようとしており、プレースホルダーテキストからその1ビットを調査コードに置き換えようとしています。それを置き換える予定の調査コードは、スクリプトが最初に実行されたときに引数を使用してスクリプトに渡されます。問題は、プレースホルダテキストを変数$ studyに置き換えようとすると、それを文字通り "$ study"に置き換えることです。sedを使ってテキストを引数に置き換える

今の私の引数は次のように設定:= $ 4

選択

輸出研究= $ 1

輸出タグ= $ 2

エクスポート・モード= $ 3

輸出

私のsedコマンドは次のようになります:

SED -i.backup -eさん/ thisisthestudycodereplacethiswiththestudycode/$の研究では、/ 'リテラルの$の研究を見ないようにsedを取得するいくつかの簡単な方法はあり

をfreq.spx、またはだろうそれは別のやり方をするのが今の時点では良いのですか?

+0

$ studyを 'sed'コマンドに注入していることに注意してください。これは 'sed'セマンティクスに従うために**必要**を意味します。これは、デリミタ(/)をバックスラッシュでエスケープする必要があることを意味し、他のいくつかのメタキャラクタも同様です。 「勉強」を任意のデータにすることを間違えてはいけません。これは迷惑です。 – lhunath

+0

ええ、このスクリプトは、Webページから呼び出される別のスクリプトから実行されます。入力がこの時点に達するまでにすべてが消毒され、チェックされます。 –

答えて

12

一重引用符の代わりに二重引用符を使用してください。

'の引用符はシェル変数の展開を防ぎ、"の引用符は引用しないためです。

+0

さて、それはそれでした。助けてくれてありがとう! –

+1

答えを広げてくれてありがとう@dmckee。 –

1

おそらく、この問題に実行されませんが、$studysedに特別な意味を持つスラッシュや他の文字が含まれている可能性がある場合は念のために...

パウロの答えは少し次善のです。

mv freq.spx freq.spx.backup && \ 
    awk -v "study=$study" '{ 
     gsub(/thisisthestudycodereplacethiswiththestudycode/, study); 
     print; 
    }' freq.spx.backup > freq.spx 

ぎこちないものの(ほら、しゃれ!)、これは関係なく、常に$studyの内容の動作します。

0

試してみてください... sed -e 's /%d /' $ a '/ g' amar.htm、amar.htm実際に置き換えられる文字列 "%d"と置き換える文字列が "a"にあります。

関連する問題