查找并替换文件中字符串的周围情况

时间:2014-07-06 01:25:10

标签: bash vim

Latex文件中出现以下命令:

\en{some_string}

这是用于输入英文文本的自定义命令。 现在我希望在每个命令中删除周围环境,以便:

\en{some_string} ---> some_string.

如何使用bash或vim命令实现它?

2 个答案:

答案 0 :(得分:4)

您可以使用sed命令,如下所示:

sed --in-place=.bak 's/\\en{\([^}]*\)}/\1/g' your_file

这会在.bak扩展名下创建原始文件的备份。然后它将替换指定文件中的所有出现。

  • s/original/replace/goriginal
  • 替换replace的所有出现
  • \(...\)捕获右侧应用的\1之间的匹配
  • [^}]*匹配}
  • 以外的任意数量的字符
  • \\en{\([^}]*\)},因此完整的左侧与\en{some_string}模式匹配,并存储{}之间的
  • 之间的内容
  • \1在右侧用作替代品。

您也可以在vim中使用完全相同的命令:

vim your_file
:%s/\\en{\([^}]*\)}/\1/g

此处:切换到命令行模式,%表示文件所有行的范围,其余部分相同。

答案 1 :(得分:0)

vim regex替换文件中的所有行:

:%s/^\\en{\([0-9a-zA-Z_]*\)}/\1/