Linux 删除文件中模式之间某些字符的所有引用
我有一个文件,其中包含一个PHP代码到TWIG的错误翻译,我只需要删除括号()的第一个和最后一个出现,以及{%和%}标记之间包含的$的任何出现 例如,如果文件中有:Linux 删除文件中模式之间某些字符的所有引用,linux,bash,shell,Linux,Bash,Shell,我有一个文件,其中包含一个PHP代码到TWIG的错误翻译,我只需要删除括号()的第一个和最后一个出现,以及{%和%}标记之间包含的$的任何出现 例如,如果文件中有: {% if($var.has($something)) %} This symbols ($($)$) won't be deleted becoase they aren't between {% and %} 我需要将其转化为: {% if var.has( something) %} This symbols ($($)$)
{% 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 %}
你知道怎么做吗?你需要多精确?如果在一行上没有多个{%%}{%%}(或者如果可以
s/%}/&\n/g
来防止这种情况发生),那么可以使用非常丑陋的
sed -e ':s; s/{%\(.*\)\$\(.*\)%}/{%\1\2%}/; ts; s/{%\([^(]*\)(\(.*\))\(.*\)%}/{%\1 \2 \3%}/'
它删除
{%}
中的所有$
,然后删除最外面的括号(如果有)。当涉及语法时,我喜欢使用vim
执行该任务。就你而言:
vim-c'%g/{%/norm/(^[ma%x`ar'文件
说明:
-vim-c-run命令
- %g-每行
- /{%-包含模式{%
- 正常-中心vim正常模式
- /(-转到(
- ^{-ESC(按CTRL+V<然后按ESC)
- ma-将当前位置标记为“a”
- %-转到匹配结束)
- x-移除它
- `回到(
- r-将其替换为空间