我正在尝试使用 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”|
最佳答案
对于 FPAT 使用 GNU awk:
$ 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"|
参见 What's the most robust way to efficiently parse CSV using awk?
关于linux - 使用 sed 时在日期字段之间转义分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57156529/