我有一个很大的 sql 文件,我想将表名从“feedback”重命名为“comments”,但我不想替换单词 feedback 以防任何行包含该文本,所以我尝试用引号选择它,但 vim 找不到它。我正在使用
:s/`feedback`/`comments`/
知道怎么做吗?也许 vim 不是最好的选择?
答案1
虽然vim
肯定能够做到这一点,但我的第一个想法是使用sed
或perl
。使用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
,即表示写入文件并退出。它需要分开,否则如果没有匹配,它将挂起。