Sham
Sham

Reputation: 13

sed replace AFTER match and retain

I've been racking my brains for hours on this, but it seems simple enough. I have a large list of strings similar to the ones below and would like to replace the hyphens only after the comma, to commas:

abc-d-ef,1-2-3-4
gh-ij,1-2-3-4

to this

abc-def,1,2,3,4
gh-ij,1,2,3,4

I can't use s/-/,/2g to replace from second occurrence as the data differs, and also though about using cut, but there must be a way to use sed with something like:

"s/\(,\).*-/\1,&/g"

Thank you

Upvotes: 1

Views: 328

Answers (2)

Claes Wikner
Claes Wikner

Reputation: 1517

An awk proposal.

awk -F, '{sub(/d-ef/,"def")gsub(/-/,",",$2)}1' OFS=, file

abc-def,1,2,3,4
gh-ij,1,2,3,4

Upvotes: 0

anubhava
anubhava

Reputation: 785146

This is more suitable for awk as we can break all lines using comma as field separator:

awk 'BEGIN{FS=OFS=","} {gsub(/-/, OFS, $2)} 1' file

abc-d-ef,1,2,3,4
gh-ij,1,2,3,4

If you want sed solution only then use:

sed -E -e ':a' -e 's/([^,]+,[^-]+)-/\1,/g;ta' file

abc-d-ef,1,2,3,4
gh-ij,1,2,3,4

Upvotes: 1

Related Questions