大家早上好, 我有一个CSV,想用NTFS ";"替换所有的NTFS ",",但如果它在字符串中(在CSV字段中),我必须维护它:

当前CSV

"001","User,Super","04/04/2024"

预期CSV

"001";"User,Super";"04/04/2024"

如果判断在字符串之间,有没有方法排除判断?我想在bash中使用几个命令来完成这一点,而不需要编写自定义循环来判断每个字符和位置,

我try 了以下命令,但没有成功:

sed -r 's/("*,*")|,/\;/g' test.csv

推荐答案

这可能对你有用(GNU sed):

sed -E ':a;s/^(("[^,"]*",)*"[^,"]*),/\1\n/;ta;y/\n,/,;/' file

沿着行迭代,将双引号中的逗号替换为新行.

当没有更多的替换时,把新行翻译成逗号,把逗号翻译成逗号.

Linux相关问答推荐

Flutter 构建错误:';DART:JS_interop';在此平台上不可用

将所有列乘以一个常数

如何使用 ftrace 过滤查看函数上方的调用堆栈?

递归/详尽地将点插入字符串

访问证书里面的图片

如何使用 awk 重新排列列?

如何使用 shell 脚本查找具有最大上下文长度的行号?

如何使用awk或其他方法提取双引号中的子字符串?

使用 awk 将 csv 拆分为带有标题的多个文件

在使用文件时截断文件 (Linux)

对一行的最后一个字段进行排序

如何使目录下的所有文件在linux上可读?

在 Ubuntu 上运行自包含的 ASP.NET Core 应用程序

./studio.sh 之后的 Android Studio 错误

Docker Volume 没有挂载任何文件

如果关键字触发然后执行命令,Shell 脚本来监视日志(log)文件?

如何以编程方式禁用硬件预取?

JAVA_HOME 和 PATH 已设置,但 java -version 仍显示旧版本

Linux 守护进程

当我已经 ssh 进入远程机器时,如何 scp 回到本地?