awk - 有没有办法用 sed 替换所有逗号,除了引号中的逗号

标签 awk sed

# Director, Movie Title, Year, Comment
Ethan Coen, No Country for Old Men, 2007, none
Ethan Coen, "O Brother, Where Art Thou?", 2000, none

就像这里一样,引号外的逗号必须替换为 |

伊桑·科恩| “哦,兄弟,你在哪里?”| 2000|无

我确实尝试过这个命令

sed  -e 's/,(?=(?:[^"]*"[^"]*")*[^"]*$)/|/g', 

首先匹配这些字符串,把我得到 RE 错误:重复操作符操作数无效

我不知道如何将全新的 re 转换为 shell 和正则表达式,我将不胜感激

最佳答案

您可以尝试使用此 gnu awk 命令和 FPAT 来使用自定义正则表达式拆分字段:

awk -v OFS='|' -v FPAT=' *"[^"]*"|[^",]+' '{$1=$1} 1' file

# Director| Movie Title| Year| Comment
Ethan Coen| No Country for Old Men| 2007| none
Ethan Coen| "O Brother, Where Art Thou?"| 2000| none

关于awk - 有没有办法用 sed 替换所有逗号,除了引号中的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65550396/

相关文章:

awk 如何更改一个单词但不是每个字母的实例

linux - sed-删除两个空白行之前的文本

matrix - 使用 awk 从 xyz 到矩阵

sed - 如何在 awk 中模拟 `uniq -d`?

linux - 使用一个文件从另一个文件中提取指定的行

linux - 使用 sed 在 Linux 中拆分或连接行

java - 使用 sed/awk/whatever 从 *nix 上的日志中获取异常

bash - 如何使用 sh 迭代 awk 的每个输出?

linux - Linux:从第二次出现开始的具有匹配字符串的XML文件中删除行的命令

linux - 使用具有 xml 值的变量进行 awk 模式匹配