0

我有一个文件,其中包含 PHP 代码到 TWIG 的某种错误翻译,我只需要删除括号 () 的第一次和最后一次出现以及包含在 {% 和 %} 标记之间的 $ 的任何出现

例如,如果文件中有:

{% if($var.has($something)) %}
This symbols ($($)$) won't be deleted becoase they aren't between {% and %}

我需要将其转换为:

{% if var.has( something) %}
This symbols ($($)$) won't be deleted becoase they aren't between {% and %}

关于如何做到这一点的任何想法?

4

2 回答 2

1

当涉及语法时,我喜欢vim用于该任务。在你的情况下:

vim -c '%g/{%/norm /(^[ma%x`ar ' 文件

解释:-vim -c - 运行命令

  • %g - 每行
  • /{% - 包含模式 {%
  • norm - 进入 vim 正常模式
  • /( - 去 (
  • ^{ - ESC(按 CTRL+V< 后跟 ESC)
  • ma - 将当前位置标记为“a”
  • % - 去匹配结束)
  • x - 删除它
  • `a - 回到 (
  • r - 将其替换为空格
于 2013-01-23T22:16:00.710 回答
0

你需要它有多准确?如果您在一行中没有多个 {% %} {% %} (或者如果可以s/%}/&\n/g防止这种情况发生),则可以使用丑陋的可怕

sed -e ':s; s/{%\(.*\)\$\(.*\)%}/{%\1\2%}/; ts; s/{%\([^(]*\)(\(.*\))\(.*\)%}/{%\1 \2 \3%}/'

它删除所有$s 内部{% %},然后删除最外面的括号(如果有)。

于 2013-01-23T22:00:12.887 回答