您的第二个引号放错了位置:
sed -e 's/\(".*\),\(.*"\)/\1 \2/g'
此外,使用正则表达式倾向于匹配文本的最长部分,这意味着如果字符串中有多个引用字段,则此操作将无效。
处理sed中多个引用字段的方法
sed -e 's/\(\"[^",]\+\),\([^",]*\)/\1 \2/g' -e 's/\"//g'
这也是解决此问题的一种方法,但是,对于每个引用的字段可能包含多个逗号的输入,sed中的第一个表达式将必须重复单个字段中最大逗号内容的次数,或者直到它为止。完全不改变输出。
用一个以上的表达式运行sed应该比运行多个sed进程和使用全管道运行的“ 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