在Unix中用“|”替换最后9个分隔符“,”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Unix中用“|”替换最后9个分隔符“,”相关的知识,希望对你有一定的参考价值。

我想替换文件中的最后9个“,”分隔符。

例如,来自:

abcd,3,5,5,7,7,1,2,3,4
"ashu,pant,something",3,5,5,7,7,8,7,8,8,8

至:

abcd|3|5|5|7|7|1|2|3|4
"ashu,pant,something"|3|5|5|7|7|8|7|8|8|8

帮助将非常感激。

答案

不完全相同但在第二次出现后用GNU sed替换所有:

$ echo "ashu,pant",3,5,5,7,7,87,8,8,8 |
  sed 's/,/|/2g'
"ashu,pant"|3|5|5|7|7|87|8|8|8

编辑以符合您更改的要求:

Hackish,但首先是反向行并用管道替换所有逗号,然后从第10次出现开始用逗号替换管道:

$ echo -e "ashu,pant",3,5,5,7,7,87,8,8,8\nabcd,3,5,5,7,7,1,2,3,4 |
  rev |
  sed 's/,/|/g; s/|/,/10g' |
  rev
"ashu,pant"|3|5|5|7|7|87|8|8|8
abcd|3|5|5|7|7|1|2|3|4

您还可以使用GNU awk和FPAT替换引号之外的所有逗号:

$ echo -e "ashu,pant",3,5,5,7,7,87,8,8,8\nabcd,3,5,5,7,7,1,2,3,4 | 
  awk 'BEGIN{FPAT="([^,]+)|("[^"]+")";OFS="|"}{$1=$1}1'
"ashu,pant"|3|5|5|7|7|87|8|8|8
abcd|3|5|5|7|7|1|2|3|4
另一答案
awk '{gsub(/[[:digit:]]/," |&")gsub(/, /,"")}1' file

output
abcd|3|5|5|7|7|1|2|3|4
"ashu,pant,something"|3|5|5|7|7|8|7|8|8|8

以上是关于在Unix中用“|”替换最后9个分隔符“,”的主要内容,如果未能解决你的问题,请参考以下文章

在Swift中用1个字符串翻译两个变量和一个分隔符

如果是葡萄牙语,如何在 EditText 中用点替换逗号

43 正则中用sub和subn函数搜索与替换 使用split函数分隔字符串 练习题

用 .csv 文件中的 VBA 仅在 3 列中用分号替换逗号

在unix中用sed反转四个长度的字母

用 TextField 中的小数分隔符替换逗号