आपके दूसरे उद्धरण गलत हैं:
sed -e 's/\(".*\),\(.*"\)/\1 \2/g'
इसके अलावा, नियमित अभिव्यक्ति का उपयोग पाठ के सबसे लंबे समय तक संभव भाग से मेल खाते हैं, जिसका अर्थ है कि यह काम नहीं करेगा यदि आपके पास स्ट्रिंग में एक से अधिक उद्धृत फ़ील्ड है।
एक ऐसा तरीका जो कई उद्धृत क्षेत्रों को sed में संभालता है
sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
यह भी इसे हल करने का एक तरीका है, हालांकि, इनपुट के साथ जिसमें प्रति उद्धरण फ़ील्ड में एक से अधिक अल्पविराम शामिल हो सकते हैं, जो कि सेड में पहली बार एक ही क्षेत्र में अधिकतम अल्पविराम सामग्री के रूप में या जब तक इसे दोहराया जा सकता है। आउटपुट बिल्कुल नहीं बदलता है।
एक से अधिक एक्सप्रेशन के साथ रनिंग सेड, चलने वाली कई सीड प्रोसेस और ओपन पाइप से चलने वाले "tr" की तुलना में अधिक कुशल होना चाहिए।
हालाँकि, यह अवांछित परिणाम हो सकता है यदि इनपुट ठीक से स्वरूपित नहीं किया गया है। यानी नेस्टेड कोट्स, अनमैरिनेटेड कोट्स।
चल रहे उदाहरण का उपयोग करना:
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'
आउटपुट:
123,ABC DEV 23,345,534,some more comma-separated words,202,NAME