linux - 删除文件中模式之间所有出现的某些字符

标签 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 ($($)$) won't be deleted becoase they aren't between {% and %}

关于如何做到这一点有什么想法吗?

最佳答案

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

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

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

  • %g - 每行
  • /{% - 包含模式 {%
  • norm - 进入 vim 正常模式
  • /( - 转到 (
  • ^{ - ESC(按 CTRL+V< FOLLOWED BY ESC)
  • ma - 将当前位置标记为“a”
  • % - 去匹配关闭 )
  • x - 删除它
  • `a - 返回 (
  • r - 将其替换为空格

关于linux - 删除文件中模式之间所有出现的某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14489758/

相关文章:

java - 在 Linux 中运行小程序?

linux - 无法远程连接到在 Debian 8 VM 上运行的 Jenkins

linux - 连接每四个文件,Linux

php - 试图从 php 脚本 : returns a pid but doesn't execute 运行 python 脚本

linux - 如何使用 sed 识别多行中的模式

linux - 监视触发器文件并复制该目录中的所有文件

c - 是否可以仅一次编译就可以在不同的操作系统上运行程序?

linux - 如何找到 Django 包

python - Bash 认为字符串没有被正确引用?

创建文件,使用 lseek() 移动 1MB,然后将一个字节写入文件