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

问题描述 投票:0回答:2

我想替换文件中的最后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

帮助将非常感激。

unix replace
2个回答
0
投票

不完全相同但在第二次出现后用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

0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.