vim - 在vim中替换匹配分隔符内的单个字符
问题描述
我有一个 csv 文件,其中一些单元格包含,
在"..."
. 我只需要将引号之间的逗号更改为分号,而无需替换行上的其余逗号。也就是说,我有这样的事情:
x,"y,z",a
y
并且只有和之间的逗号z
应该替换为;
。这应该如何在vim中完成?
解决方案
对于每行一对引号,您可以使用:
%s/\v("[^"]*)@<=,(.*")@=/;/g
输入:
x,"y,z,a",b
输出:
x,"y;z;a",b
对于每行不止一对引号,您可以使用以下 awk 命令:
:!awk -F'"' -v OFS='"' '{ for (i=2; i<=NF; i+=2) gsub(",", ";", $i) } 1' infile > outfile
此命令基于Unix StackExchange中的一个问题。它会将引号设置"
为字段分隔符,并使用 . 在每个其他字段中替换逗号gsub
。
推荐阅读
- python - “rasterio._io.RasterReader”对象没有属性“xy”
- linux - 管道中的命令之间有哪些缓冲区?
- angular - Ionic3、Angular 和 Firebase 从 db 获取
- kubernetes - “kubectl get nodes”仅显示 master 而不是 worker
- r - 将选择性行值从1个数据帧复制到R中的另一个
- java - Clojure Mock 调用 Java 对象函数
- c# - Unity3d NullReferenceException
- ionic-framework - Ionic 3 HTTP GET – 获取可观察的变化
- view - 使用复杂键的过滤器不起作用(使用 startkey 和 endkey)
- reactjs - 反应原生动态图像