Como você está tentando usar sed
ranges, veja uma maneira possível de fazer isso. As linhas no seu additional-values.txt
seguem o mesmo padrão:
KEY[i++] = 'VALUE'; //etc
e, tanto quanto eu posso dizer, cada linha deve ser inserida em um intervalo que é sempre delimitado por
var KEY = new Array();
e uma linha vazia
para poder processar additional-values.txt
e transformá-lo em um script sed
para cada linha:
/^var KEY = new Array();/,/^$/{
/^$/ i\
KEY[i++] = 'VALUE'; // etc
}
ou seja, em /^var KEY = new Array();/,/^$/
range, insira a linha KEY[i++] = 'VALUE'; // etc
antes da linha vazia. Você então usa o script para processar lists.txt
:
sed 's/\/&&/g' additional-values.txt | \
sed 's|^\([^[]*\).*|/^var = new Array();/,/^$/{\
/^$/ i\\
&\
}|' | sed -f - lists.txt
O primeiro sed
escapa de todas as barras invertidas, o segundo sed
processa additional-values.txt
transformando-o em um script que é usado pelo terceiro sed
(via -f
) para processar lists.txt
.
por exemplo. amostra additional-values.txt
content:
GoodDomains[i++] = '^stuff/here/'; \
BadDomains[i++] = '%XYZ+=?\<>';
GoodNetworks[i++] = '|*{};:\'; // Malware\
BadDomains[i++] = '\$.|&$@"#"!||';
o resultado de:
sed 's/\/&&/g' additional-values.txt | \
sed 's|^\([^[]*\).*|/^var = new Array();/,/^$/{\
/^$/ i\\
&\
}|'
é
/^var GoodDomains = new Array();/,/^$/{
/^$/ i\
GoodDomains[i++] = '^stuff/here/'; \
}
/^var BadDomains = new Array();/,/^$/{
/^$/ i\
BadDomains[i++] = '%XYZ+=?\\<>';
}
/^var GoodNetworks = new Array();/,/^$/{
/^$/ i\
GoodNetworks[i++] = '|*{};:\'; // Malware\\
}
/^var BadDomains = new Array();/,/^$/{
/^$/ i\
BadDomains[i++] = '\$.|&$@"#"!||';
}
isto é então passado para sed -f - lists.txt
assim com por ex. amostra lists.txt
:
// Counter Variable to initalize the arrays.
var i= 0;
var GoodDomains = new Array();
i=0;
GoodDomains[i++] = 'aba.com'; // Phish - 2010-02-05
var GoodNetworks = new Array();
i=0;
GoodNetworks[i++] = '10.0.0.0, 255.0.0.0'; // NRIP
// GoodNetworks[i++] = "63.140.35.160"; // DNSWCD 2o7
var BadDomains = new Array();
i=0;
BadDomains[i++] = '.0catch.com'; // AdServer - 2009-06-16
//var BadDomains = new Array();
em execução:
sed 's/\/&&/g' additional-values.txt | \
sed 's|^\([^[]*\).*|/^var = new Array();/,/^$/{\
/^$/ i\\
&\
}|' | sed -f - lists.txt
saídas:
// Counter Variable to initalize the arrays.
var i= 0;
var GoodDomains = new Array();
i=0;
GoodDomains[i++] = 'aba.com'; // Phish - 2010-02-05
GoodDomains[i++] = '^stuff/here/'; \
var GoodNetworks = new Array();
i=0;
GoodNetworks[i++] = '10.0.0.0, 255.0.0.0'; // NRIP
// GoodNetworks[i++] = "63.140.35.160"; // DNSWCD 2o7
GoodNetworks[i++] = '|*{};:\'; // Malware\
var BadDomains = new Array();
i=0;
BadDomains[i++] = '.0catch.com'; // AdServer - 2009-06-16
BadDomains[i++] = '%XYZ+=?\<>';
BadDomains[i++] = '\$.|&$@"#"!||';
//var BadDomains = new Array();
Se preferir gnu sed
e processar substituição:
sed -E 's|^([^[]*).*|/^var = new Array();/,/^$/{/^$/ i\\n&\
}|' <(sed 's/\/&&/g' additional-values.txt) | sed -f - lists.txt