我有一个csv文件,其中某些单元格在,
之间包含"..."
。我只需要将引号之间的逗号更改为分号,而不必替换该行上的其余逗号。也就是说,我有这样的东西:
x,"y,z",a
只有y
和z
之间的逗号应替换为;
。在vim中应该怎么做?
答案 0 :(得分:4)
对于每行一对引号,您可以使用:
allOf().get()
输入:
public void newInit() throws ExecutionException, InterruptedException {
CompletableFuture cf1 = CompletableFuture.supplyAsync(() -> {
return 1L;
}).thenAccept(result -> {
this.result1 = result;
});
CompletableFuture cf2 = CompletableFuture.supplyAsync(() -> {
return 2L;
}).thenAccept(result -> {
this.result2 = result;
});
CompletableFuture.allOf(cf1, cf2).get();
}
输出:
%s/\v("[^"]*)@<=,(.*")@=/;/g
对于每行多于一对引号,您可以使用以下awk命令:
x,"y,z,a",b
此命令基于Unix StackExchange中的问题。它将设置引号x,"y;z;a",b
作为字段分隔符,并使用:!awk -F'"' -v OFS='"' '{ for (i=2; i<=NF; i+=2) gsub(",", ";", $i) } 1' infile > outfile
在每个其他字段中替换逗号。
答案 1 :(得分:1)
答案 2 :(得分:0)
如果双引号之间只有一个逗号,并且每行不超过一个匹配项,则以下替换命令应该起作用:
:%s/\(".*\),\(.*"\)/\1;\2/