1

我的 smarty 模板文件中有很多这样的字段。

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

我想用 {$email|escape:htmlall} 或 {$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} 替换任何像 {$} 这样的字符串
  • 它还确保分别处理两个连续的字段(如示例中所示)。这是通过要求不出现 '}' 来完成的(这是由 [^}\|]* 部分完成的,这意味着:一系列零个或多个字符,除了 '}' 和 ' |'(见下文)。
  • 它忽略任何已经被转义的标签(通过忽略任何在花括号内带有 | 的标签)。
于 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 回答