Kutipan kedua Anda salah tempat:
sed -e 's/\(".*\),\(.*"\)/\1 \2/g'
Selain itu, menggunakan ekspresi reguler cenderung cocok dengan bagian teks terpanjang yang mungkin, artinya ini tidak akan berfungsi jika Anda memiliki lebih dari satu bidang yang dikutip dalam string.
Cara yang menangani beberapa bidang dikutip dalam sed
sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
Namun, ini juga merupakan cara untuk menyelesaikannya, dengan input yang mungkin mengandung lebih dari satu koma per bidang yang dikutip, ekspresi pertama dalam sed harus diulangi sebanyak yang koma maksimum dalam satu bidang, atau sampai tidak mengubah output sama sekali.
Menjalankan sed dengan lebih dari satu ekspresi harus lebih efisien daripada beberapa proses sed berjalan dan "tr" semua berjalan dengan pipa terbuka.
Namun, ini mungkin memiliki konsekuensi yang tidak diinginkan jika input tidak diformat dengan benar. yaitu kutipan bersarang, kutipan tidak ditentukan.
Menggunakan contoh yang berjalan:
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'
Keluaran:
123,ABC DEV 23,345,534,some more comma-separated words,202,NAME