我想创建一个sed命令来更改每个逗号分隔部分都将用双引号括起来的字符串。问题是有些值已经有双引号了。
更改自:

ABZ00016,ABZ,"449,9",450,445,449,"-0,21",405,13,"182,15",0,0,0


"ABZ00016","ABZ","449,9","450","445","449","-0,21","405","13","182,15","0","0","0"

我准备了两个sed命令:
第一个命令排除带双引号的值
sed -e 's/"[^"]*"//g'

第二个在每个部分加上双引号
 sed  -e 's/\([^,]*\),/"\1",/g'

现在我想从第一个命令中排除结果并使用第二个命令进行更改:
 sed -e '/"[^"]*"/!s/\([^,]*\),/"\1",/g'

但它不起作用…

最佳答案

与regex mate一起使用sed:

sed -r -e 's/[-.a-zA-Z0-9]+/"&"/g' -e 's/""/"/g'

编辑:根据您的请求更新,按预期工作:
sed -r -e 's/"([^,]+)(,)([0-9]+)"/\1\.\3/g' -e 's/[-.a-zA-Z0-9]+/"&"/g' -e 's/""/"/g' -e 's/\./,/g'

09-10 01:15
查看更多