在多个文件中替换输入标记的值

时间:2013-04-19 09:40:34

标签: php regex linux sed smarty

我的智能模板文件中有很多字段。

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

我想将其替换为{$email|escape:htmlall}或{$ variable_name}

我怎么能在linux中这样做?我在sed中编写正则表达式时遇到了困难。

3 个答案:

答案 0 :(得分:1)

尝试:

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

作为测试,请使用:

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

这个正则表达式的作用:

  • 它将{$ | escape:htmlall}
  • 替换为{$}之类的字符串
  • 它还确保分别处理两个连续的字段(如示例中所示)。这是通过要求在'}'可能发生的情况下完成的(这由[^} \ |] *部分完成,这意味着:一系列零个或多个字符,除了'}'和'之外都可以是任何字符|'(见下文)。
  • 它会忽略已经转义的所有标记(通过忽略任何在花括号中具有|的标记)。

答案 1 :(得分:0)

 perl -ape 's/({\$\w+)(?!\|escape:htmlall)}/$1|escape:htmlall}/g' file

这是使用否定前瞻功能。

这将忽略已经有转义的变量:htmlall。

答案 2 :(得分:0)

之前进行备份并试一试:

grep -rl "{$email}" yourdirectory | xargs sed -i 's/\{\$email\}/{$email|escape:htmlall}/g'