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/

相关文章:

linux - 合并许多大型 CSV 文件(在 Linux 中)

sorting - 删除文件中的 n 个重复行

linux - 如何使用 "find"在名称中包含空格的目录中搜索文件?

Bash:如何使用 sed 仅替换文件中的最后一次出现?

bash - 将文件名添加到循环内多个 fasta 文件的 fasta header

linux - 使用“grep”家族的一个。如何获得省略搜索字词的行?

bash - Grep 匹配前每行中的所有字符

linux - 在左花括号和右花括号之间获取字符串

string - 删除不包含给定字符串的整行

bash - 如何创建 Linux 脚本(bash、sed、awk...)以在配置文件的特定部分添加一行