linux - 或者 Sed 中的条件

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

最佳答案

尝试一下这个 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"|

关于linux - 或者 Sed 中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57164080/

相关文章:

linux - 带通配符的 rm 显示任务集帮助输出

sed - 如何在目录树中递归查找并替换所有出现的字符串?

bash - 使用 sed 格式化 IP

linux - 可用的UDP端口

linux - 无法通过在 ubuntu 13.10 上单击启动栏中的图标来启动 IntelliJ IDEA

linux - 计算来自标准输入的字数和行数

bash 函数从 sed 传递空格和行分隔的参数

linux - 使用 Bash 脚本进行多线程编程

linux - 如何在 Perl 中对需要 JavaScript 的页面进行网络测试?

linux - pthread_wrlock_xxlock 不是自旋锁吗?