Twoje drugie cytaty są niewłaściwe:
sed -e 's/\(".*\),\(.*"\)/\1 \2/g'
Ponadto używanie wyrażeń regularnych zwykle pasuje do najdłuższej możliwej części tekstu, co oznacza, że to nie zadziała, jeśli w łańcuchu będzie więcej niż jedno pole cytowane.
Sposób, który obsługuje wiele cytowanych pól w sed
sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
Jest to również sposób na rozwiązanie tego problemu, jednak w przypadku danych wejściowych, które mogą zawierać więcej niż jeden przecinek na cytowane pole, pierwsze wyrażenie w sed musiałoby być powtarzane tyle razy, ile maksymalna zawartość przecinka w jednym polu, lub dopóki w ogóle nie zmienia wyjścia.
Uruchamianie sed z więcej niż jednym wyrażeniem powinno być bardziej wydajne niż kilka uruchomionych procesów sed i „tr” wszystkie z otwartymi potokami.
Może to jednak mieć niepożądane konsekwencje, jeśli dane wejściowe nie zostaną poprawnie sformatowane. tzn. cytaty zagnieżdżone, cytaty niezakończone.
Korzystając z działającego przykładu:
echo '123,"ABC, DEV 23",345,534,"some more, comma-separated, words",202,NAME' \
| sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' \
-e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
Wydajność:
123,ABC DEV 23,345,534,some more comma-separated words,202,NAME