首页 > 解决方案 > 使用 sed 时日期文件之间的转义分隔符

问题描述

我正在尝试|在包含日期、空值、带管道分隔符的字符串的文本上使用 sed 删除引号中的分隔符。我使用了以下 sed 它的工作正常,但它删除了日期之间的分隔符。任何帮助将不胜感激。

sed -E 's/(^|[^"|])\|($|[^"|])/\1 \2/g' <file>

输入:

"Southern|Palms"|"AA|None"|"4"|"Ken|Coast"|1/11/2019 00:00:00|30/4/2020 00:00:00|"TH"|

回报:

"Southern Palms"|"AA None"|"4"|"Ken Coast"|1/11/2019 00:00:00 30/4/2020 00:00:00|"TH"|

预期输出:
"Southern Palms"|"AA None"|"4"|"Ken Coast"|1/11/2019 00:00:00|30/4/2020 00:00:00|"TH"|

标签: linuxunixawksed

解决方案


使用 GNU awk 进行 FPAT:

$ awk -v FPAT='[^|]*|"[^"]+"' -v OFS='|' '{for (i=1;i<=NF;i++) gsub(/\|+/," ",$i)} 1' file
"Southern Palms"|"AA None"|"4"|"Ken Coast"|1/11/2019 00:00:00|30/4/2020 00:00:00|"TH"|

请参阅使用 awk 有效解析 CSV 的最可靠方法是什么?


推荐阅读