İkinci teklifiniz yanlış yerleştirildi:
sed -e 's/\(".*\),\(.*"\)/\1 \2/g'
Ek olarak, düzenli ifadeleri kullanmak metnin mümkün olan en uzun bölümünü eşleştirme eğilimindedir; bu, dizede birden fazla alıntılanmış alan varsa, bunun işe yaramayacağı anlamına gelir.
Birden çok alıntılanmış alanı sed'de işleyen bir yol
sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
Bu aynı zamanda bunu çözmenin bir yoludur, ancak, belirtilen alan başına birden fazla virgül içerebilen girdiyle, sed'deki ilk ifadenin tek bir alandaki maksimum virgül içeriği kadar veya tekrarlanana kadar tekrarlanması gerekir. çıkışı hiç değiştirmez.
Birden fazla ifade ile sed'in çalıştırılması, çalışan birkaç sed işlemden ve hepsi açık borularla çalışan bir "tr" den daha verimli olmalıdır.
Bununla birlikte, giriş uygun şekilde biçimlendirilmemişse, bunun istenmeyen sonuçları olabilir. yani, yuvalanmış tırnaklar, sonlandırılmamış tırnaklar.
Çalışan örneği kullanarak:
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'
Çıktı:
123,ABC DEV 23,345,534,some more comma-separated words,202,NAME