Vim操作:如何快速将每行第二次出现的string1替换为string2
首选Vim操作方案
直接用Vim内置替换命令即可实现需求,操作极短:
- 全文件批量替换所有行的第2次
string1匹配为string2,普通模式下直接输入::%s/string1/string2/2
如果需要替换前逐一确认修改,末尾加c参数即可::%s/string1/string2/2c
命令说明:替换命令末尾的数字标记表示仅对每行的第N次匹配生效,适合无特殊字符的普通匹配场景。
如果匹配内容有特殊正则字符,推荐用带捕获组的写法更稳定::%s/\v(string1.*)string1/\1string2/
该写法用\v开启正则简化模式,先捕获第一次string1及之后的内容,替换时保留捕获内容,仅将第二个string1替换为目标值。
终端命令可选方案
如果不需要打开编辑器操作,可直接用终端命令处理文件:
- sed方案(直接修改原文件):
sed -i 's/string1/string2/2' 你的文件名 - awk方案(不修改原文件,输出到新文件):
awk '{sub(/string1/,"tmp");sub(/string1/,"string2");sub(/tmp/,"string1")}1' 原文件名 > 新文件名
内容的提问来源于stack exchange,提问作者user9224371
相关产品推荐
相关产品推荐

