You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:如何在gvim/awk/sed中实现指定文本替换?

没问题!我来帮你搞定这个文本替换需求,不管用GVim、Sed还是Awk都能轻松实现,下面给你逐个拆解具体方法:

1. 用GVim/Vim完成替换

你之前用:%s/^.*"/出问题,是因为这个正则会匹配从行首到最后一个双引号的所有内容,替换后自然只剩后面的-nothing了。我们需要用正则捕获分组来精准提取需要保留的内容,再重新拼接成目标格式。

在GVim里输入这个命令就行:

:%s/"\([^"]*\)" -\([^ ]*\)/\1" - \2/g

我给你拆解下这个命令的逻辑:

  • ":匹配开头的双引号
  • \([^"]*\):用括号捕获双引号里的内容(也就是你例子里的word,[^"]*表示匹配任意非双引号的字符)
  • " -:匹配中间的" -部分
  • \([^ ]*\):捕获后面的nothing部分([^ ]*表示匹配任意非空格的字符)
  • 替换后的\1" - \2:把第一个捕获组(word)放前面,加双引号,然后是-(空格-空格),最后放第二个捕获组(nothing)
  • 末尾的g表示全局替换,如果一行里有多个符合格式的内容,都会被替换掉;如果每行只有一个,不加g也可以。
2. 用Sed工具实现替换

Sed是处理文本替换的常用命令行工具,逻辑和Vim类似,直接在终端里运行:

sed 's/"\([^"]*\)" -\([^ ]*\)/\1" - \2/g' your_file.txt

如果想直接修改原文件(原地替换),加上-i参数:

sed -i 's/"\([^"]*\)" -\([^ ]*\)/\1" - \2/g' your_file.txt
3. 用Awk工具实现替换

Awk可以通过正则匹配捕获内容,再重新拼接输出,命令如下:

awk '{match($0, /"([^"]*)" -([^ ]*)/, arr); print arr[1] "\" - " arr[2]}' your_file.txt

这里用match函数匹配目标格式,把捕获到的word和nothing存到数组arr里,然后按你要的格式打印出来。

如果你的文本里word或nothing包含特殊字符(比如空格),可以再调整正则的匹配规则,不过针对你给出的例子,上面的命令完全够用啦!

内容的提问来源于stack exchange,提问作者Vinut V Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:45:11