- 论坛徽章:
- 2
|
本帖最后由 damcool 于 2014-05-30 09:40 编辑
我承认纯bash没办法解析,好像是因为字符"\"会在变量传递时丢失。晕!下面是awk解决方案,顺便带了几个极端例子测试。有兴趣的朋友可以用以测试自己的代码。- echo 'type: abc, attr: x,y,z, name: kskdf sdf'|awk -F "," '{for (i=1; i<=NF;i++){t=$i;gsub(/^[[:blank:]]+/,"",t);if (match(t,/[^:]+:[^:]+/) && !match(t,/^\"/)){t=k;gsub(/\\\"/,"",t);n=length(t);gsub(/\"/,"",t);n=(n-length(t))%2;if (n<1){ if (j>0) print j"-->"k;j++;k=$i;gsub(/^[[:blank:]]+/,"",k)} else k=k","$i}else k=k","$i} if (j>0) print j"-->"k}'
- echo 'type: abc, attr: "x,y,z", name: kskdf sdf'|awk -F "," '{for (i=1; i<=NF;i++){t=$i;gsub(/^[[:blank:]]+/,"",t);if (match(t,/[^:]+:[^:]+/) && !match(t,/^\"/)){t=k;gsub(/\\\"/,"",t);n=length(t);gsub(/\"/,"",t);n=(n-length(t))%2;if (n<1){ if (j>0) print j"-->"k;j++;k=$i;gsub(/^[[:blank:]]+/,"",k)} else k=k","$i}else k=k","$i} if (j>0) print j"-->"k}'
- echo 'type: abc, attr: "x,y,z::\"$@#%^&", name: kskdf sdf'|awk -F "," '{for (i=1; i<=NF;i++){t=$i;gsub(/^[[:blank:]]+/,"",t);if (match(t,/[^:]+:[^:]+/) && !match(t,/^\"/)){t=k;gsub(/\\\"/,"",t);n=length(t);gsub(/\"/,"",t);n=(n-length(t))%2;if (n<1){ if (j>0) print j"-->"k;j++;k=$i;gsub(/^[[:blank:]]+/,"",k)} else k=k","$i}else k=k","$i} if (j>0) print j"-->"k}'
- echo 'type: abc, attr: "x","y","z::\"$@#%^&", name: kskdf sdf'|awk -F "," '{for (i=1; i<=NF;i++){t=$i;gsub(/^[[:blank:]]+/,"",t);if (match(t,/[^:]+:[^:]+/) && !match(t,/^\"/)){t=k;gsub(/\\\"/,"",t);n=length(t);gsub(/\"/,"",t);n=(n-length(t))%2;if (n<1){ if (j>0) print j"-->"k;j++;k=$i;gsub(/^[[:blank:]]+/,"",k)} else k=k","$i}else k=k","$i} if (j>0) print j"-->"k}'
- echo 'type: abc, attr: x,y,z::\"$@#%^&, name: kskdf sdf'|awk -F "," '{for (i=1; i<=NF;i++){t=$i;gsub(/^[[:blank:]]+/,"",t);if (match(t,/[^:]+:[^:]+/) && !match(t,/^\"/)){t=k;gsub(/\\\"/,"",t);n=length(t);gsub(/\"/,"",t);n=(n-length(t))%2;if (n<1){ if (j>0) print j"-->"k;j++;k=$i;gsub(/^[[:blank:]]+/,"",k)} else k=k","$i}else k=k","$i} if (j>0) print j"-->"k}'
复制代码 |
|