首页 > 解决方案 > 或 Sed 中的条件

问题描述

我正在检查两个 sed 条件,试图添加一个 sed 命令,但它不起作用。

输入:

"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"|

试图从双引号字段中删除分隔符 (|或)。\

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

|我还尝试了使用分隔符或 \条件的以下方式:

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

标签: linuxunixsed

解决方案


试试这个 awk 单行代码:

awk -F'"' -v OFS='"' '{for(i=2;i<=NF;i+=2)gsub(/[/|]/," ",$i)}7' file

注意:此解决方案假定您的所有报价都是配对的。

用我的傻瓜测试:

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

kent$  awk -F'"' -v OFS='"' '{for(i=2;i<=NF;i+=2)gsub(/[/|]/," ",$i)}7' f
"Southern Palms"|"AA None"|"4"|"Ken Coast"|1/11/2019 00:00:00|30/4/2020 00:00:00|"TH"|

推荐阅读