在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个分隔符“,”的主要内容,如果未能解决你的问题,请参考以下文章
43 正则中用sub和subn函数搜索与替换 使用split函数分隔字符串 练习题