Я использовал этот фрагмент кода для выполнения описанной вами задачи:
function mergeRecursive(obj1, obj2) {
for (var p in obj2) {
try {
if(obj2[p].constructor == Object) {
obj1[p] = mergeRecursive(obj1[p], obj2[p]);
}
// Property in destination object set; update its value.
else if (Ext.isArray(obj2[p])) {
// obj1[p] = [];
if (obj2[p].length < 1) {
obj1[p] = obj2[p];
}
else {
obj1[p] = mergeRecursive(obj1[p], obj2[p]);
}
}else{
obj1[p] = obj2[p];
}
} catch (e) {
// Property in destination object not set; create it and set its value.
obj1[p] = obj2[p];
}
}
return obj1;
}
это даст вам новый объект, который объединит все изменения между старым объектом и новым объектом из ваша форма
Это решает проблему, которую я считаю:
test_data() {
cat <<EOF
,"val1,val2...","val1,val2,val3..",Not Processed,0,
,"val1,val2..","",Not Processed,0,
,"","val1,val2,val3....",Not Processed,0,
EOF
}
test_data | sed -e 's/\(.*\),"[^"]*","[^"]*",\(Not Processed,0,\)\(.*\)/\1,,,\2\3/g'
Вывод:
▶ bash data.sh
,,,Not Processed,0,
,,,Not Processed,0,
,,,Not Processed,0,