1

私の smarty テンプレート ファイルには、このような多くのフィールドがあります。

{$email} (this can be anything like -- {$description}, {$variable_name}

{$email|escape:htmlall} or {$variable_name}に置き換えたい

どうすればLinuxでそれを行うことができますか? sed で正規表現を書くのに苦労しています。

4

3 に答える 3

1

試す:

sed 's/{\(\$[^}\|]*\)}/{\1|escape:htmlall}/g'

テストとして、次を使用します。

echo 'blabla {$email} blieblie {$name} bloebloe ${alreadydone|escape:htmlall}'|sed 's/{\(\$[^}\|]*\)}/{\1|escape:htmlall}/gi'

この正規表現が行うこと:

  • {$} のような文字列を {$|escape:htmlall} に置き換えます。
  • また、(例のように) 2 つの連続するフィールドが別々に処理されるようにします。これは、「}」が発生しないことを要求することによって行われます (これは [^}\|]* 部分によって行われます。つまり、「}」および「 |' (下記参照)。
  • すでにエスケープされているタグはすべて無視されます (中括弧内に | があるタグは無視されます)。
于 2013-04-19T09:59:00.467 に答える
0
 perl -ape 's/({\$\w+)(?!\|escape:htmlall)}/$1|escape:htmlall}/g' file

これは、否定先読み機能を使用しています。

これにより、既に escape:htmlall を持つ変数は無視されます。

于 2013-04-19T09:48:30.027 に答える
0

前にバックアップを作成して、これを試してください:

grep -rl "{$email}" yourdirectory | xargs sed -i 's/\{\$email\}/{$email|escape:htmlall}/g'
于 2013-04-19T09:54:47.023 に答える