Ваша собственная попытка sed '/\"/,/\"/s/,//'
не удалась, потому что указанный вами диапазон адресов фильтрует только диапазон строк, а не диапазон внутри строки.
Этот тип задач является неприятным в стандарте sed
. Если речь идет всего об одной запятой, то sed -E 's/("[0-9]*),([0-9]*")/\1 \2/
поможет, но для нескольких запятых вам придется зацикливаться, что даст уродливые результаты, такие как
sed -Ee :loop -e 's/("[0-9 ]*),([^"]*")/\1 \2/;tloop'
("[0-9]*)
соответствует открывающей двойной кавычке, за которой следует любое количество цифр, и будет называться \1
в замене, ([^"]*")
соответствует чему угодно после запятой до закрывающей "
, поэтому \1 \2
то же самое, но с заменой первой запятой.
Теперь команда t
переходит к отметке loop
, если была произведена замена. Это повторяется до тех пор, пока не останется запятой, которую нужно заменить.
Это работает даже для случаев с более чем одним числом с любым количеством запятых:,7/30/2019,"99,999,999,999,999",0,1,"10,000","foo, bar"
будет преобразовано в,7/30/2019,"99 999 999 999 999" 0 1 "10 000" "foo, bar"