Если вы ожидаете только цифры, то будет работать следующее выражение
sed -e 's/,/;/g' -e 's/\("[0-9][0-9]*\);\([0-9][0-9]*"\)/\1,\2/g'
например,
$ echo '1,3,"3,5",4,"5,5"' | sed -e 's/,/;/g' -e 's/\("[0-9][0-9]*\);\([0-9][0-9]*"\)/\1,\2/g'
1;3;"3,5";4;"5,5"
Вы не можете просто заменить [0-9] [0-9] * с. * для сохранения любого, в том числе в кавычках,. * слишком жадный и слишком много соответствует.Таким образом, вы должны использовать [a-z0-9] *
$ echo '1,3,"3,5",4,"5,5",",6","4,",7,"a,b",c' | sed -e 's/,/;/g' -e 's/\("[a-z0-9]*\);\([a-z0-9]*"\)/\1,\2/g'
1;3;"3,5";4;"5,5";",6";"4,";7;"a,b";c
. Он также имеет преимущество перед первым решением в простоте понимания.Мы просто заменяем каждый на;а потом исправлять каждое;в кавычках назад к,