在 vim 中替换引号内的文本

在 vim 中替换引号内的文本

我有一个很大的 sql 文件,我想将表名从“feedback”重命名为“comments”,但我不想替换单词 feedback 以防任何行包含该文本,所以我尝试用引号选择它,但 vim 找不到它。我正在使用

:s/`feedback`/`comments`/

知道怎么做吗?也许 vim 不是最好的选择?

答案1

虽然vim肯定能够做到这一点,但我的第一个想法是使用sedperl。使用sed

sed -i.bak 's/`feedback`/`comments`/g' path/to/file

-i标志使得sed在指定的文件中执行操作而不是写入stdout-isuffix制作备份副本path/to/filesuffix)。

答案2

在 vim 中尝试:

:%s/`feedback`/`comments`/gc

这应该可以按你预期的那样工作

答案3

这是 vi/vim 的单行命令(用来ex -s避免打开全屏编辑器导致短暂闪烁):

ex -s -c 'w %~ | %s/`feedback`/`comments`/g' -c 'x' <file>

解释:

  • w %~保存带有后缀的文件副本~。万一您弄乱了某些东西,这可以作为备份。
  • |是命令分隔符。
  • %意思是“在每一行都执行这个操作”。
  • s/`feedback`/`comments`,您可能已经知道,意思是“在当前行用 替换`feedback`与正则表达式匹配的文本”。`comments`
  • g表示“全局”,即在该行第一次替换之后不要停止。
  • x是 的简写wq,即表示写入文件并退出。它需要分开,否则如果没有匹配,它将挂起。

相关内容