Trích dẫn thứ hai của bạn bị đặt sai chỗ:
sed -e 's/\(".*\),\(.*"\)/\1 \2/g'
Ngoài ra, sử dụng các biểu thức thông thường có xu hướng khớp với phần dài nhất có thể của văn bản, có nghĩa là điều này sẽ không hoạt động nếu bạn có nhiều hơn một trường được trích dẫn trong chuỗi.
Một cách xử lý nhiều trường được trích dẫn trong sed
sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
Tuy nhiên, đây cũng là một cách để giải quyết vấn đề này, với đầu vào có thể chứa nhiều dấu phẩy trên mỗi trường được trích dẫn, biểu thức đầu tiên trong sed sẽ phải được lặp lại nhiều lần so với nội dung dấu phẩy tối đa trong một trường hoặc cho đến khi không thay đổi đầu ra.
Chạy sed với nhiều hơn một biểu thức sẽ hiệu quả hơn so với một số quy trình sed đang chạy và một "tr" tất cả chạy với các ống mở.
Tuy nhiên, điều này có thể có hậu quả không mong muốn nếu đầu vào không được định dạng đúng. tức là dấu ngoặc kép, dấu ngoặc kép.
Sử dụng ví dụ đang chạy:
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'
Đầu ra:
123,ABC DEV 23,345,534,some more comma-separated words,202,NAME