linux - 使用 sed 时在日期字段之间转义分隔符

标签 linux unix awk 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”|

最佳答案

对于 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/

相关文章:

c - 我应该在 Linux 中释放 getpwuid() 返回的指针吗?

c - 读取特定格式的字符串

linux - 使用/dev/tcp 而不是 wget

regex - 从字符串中提取分辨率

Bash/Shell - 带空格的路径搞砸了

linux - 如何使用 shell 脚本从文件中读取元素,进行一些计算并写回?

c - 如何在不使用 system、popen、fork、exec 的情况下在 C/Linux 中执行外部命令?

unix - 关于 fork() 和 exec() 如何工作的困惑

ruby - 为什么我的 TERM 没有被捕获

c - 父局部变量充当三个 child 之间的共享变量