Le tue seconde citazioni sono fuori posto:
sed -e 's/\(".*\),\(.*"\)/\1 \2/g'
Inoltre, l'uso delle espressioni regolari tende a corrispondere alla parte più lunga possibile del testo, il che significa che non funzionerà se nella stringa sono presenti più campi tra virgolette.
Un modo che gestisce più campi tra virgolette in sed
sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
Questo è anche un modo per risolverlo, tuttavia, con input che possono contenere più di una virgola per campo tra virgolette, la prima espressione nella sed dovrebbe essere ripetuta tante volte quanto il massimo contenuto di virgola in un singolo campo, o fino a quando non modifica affatto l'output.
L'esecuzione di sed con più di un'espressione dovrebbe essere più efficiente di diversi processi sed in esecuzione e un "tr" tutto in esecuzione con pipe aperte.
Tuttavia, ciò potrebbe avere conseguenze indesiderate se l'input non è formattato correttamente. cioè virgolette nidificate, virgolette non terminate.
Utilizzando l'esempio corrente:
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'
Produzione:
123,ABC DEV 23,345,534,some more comma-separated words,202,NAME