我已经绞尽脑汁待了好几个小时,但看起来很简单。我有一个很大的字符串列表,类似于下面的字符串,并希望将逗号后的连字符替换为逗号:
abc-d-ef,1-2-3-4
gh-ij,1-2-3-4
到此
abc-def,1,2,3,4
gh-ij,1,2,3,4
我不能使用s / - /,/ 2g来替换第二次出现,因为数据不同,并且虽然关于使用cut,但是必须有一种方法来使用sed,例如:
"s/\(,\).*-/\1,&/g"
谢谢
答案 0 :(得分:1)
这更适合awk
,因为我们可以使用逗号作为字段分隔符来中断所有行:
awk 'BEGIN{FS=OFS=","} {gsub(/-/, OFS, $2)} 1' file
abc-d-ef,1,2,3,4
gh-ij,1,2,3,4
如果您只想使用sed
解决方案,请使用:
sed -E -e ':a' -e 's/([^,]+,[^-]+)-/\1,/g;ta' file
abc-d-ef,1,2,3,4
gh-ij,1,2,3,4
答案 1 :(得分:0)
一个awk提案。
awk -F, '{sub(/d-ef/,"def")gsub(/-/,",",$2)}1' OFS=, file
abc-def,1,2,3,4
gh-ij,1,2,3,4
答案 2 :(得分:0)
正如OP所提到的,OP的Input_file可能有多个逗号,所以下面的内容可能对你有帮助。
awk -F, 'NF>1{for(i=2;i<=NF;i++){gsub(/-/,",",$i)}} 1' OFS=, Input_file
abc-d-ef,1,2,3,4
gh-ij,1,2,3,4