Vos deuxièmes citations sont déplacées:
sed -e 's/\(".*\),\(.*"\)/\1 \2/g'
De plus, l'utilisation d'expressions régulières a tendance à correspondre à la partie la plus longue possible du texte, ce qui signifie que cela ne fonctionnera pas si vous avez plusieurs champs entre guillemets dans la chaîne.
Un moyen qui gère plusieurs champs entre guillemets dans sed
sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
C'est également un moyen de résoudre ce problème, cependant, avec une entrée pouvant contenir plus d'une virgule par champ cité, la première expression dans le sed devra être répétée autant de fois que le contenu maximal de la virgule dans un seul champ, ou jusqu'à ce qu'elle ne change pas du tout la sortie.
L'exécution de sed avec plusieurs expressions doit être plus efficace que plusieurs processus sed exécutés et un "tr" fonctionnant tous avec des tuyaux ouverts.
Cependant, cela peut avoir des conséquences indésirables si l'entrée n'est pas correctement formatée. c'est-à-dire des guillemets imbriqués, des guillemets non terminés.
En utilisant l'exemple en cours d'exécution:
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'
Sortie:
123,ABC DEV 23,345,534,some more comma-separated words,202,NAME