Substituindo string em HTML pelo valor do arquivo de pesquisa

0

Situação: Eu tenho um arquivo HTML de origem, com alguns valores que devem ser preenchidos com dados de outro arquivo.

O valor que deve ser enriquecido é entre uma tag única.

<Uniquetag>Mystring1</uniquetag>

O arquivo 2 tem várias colunas e muitas linhas:

Info1 Mystring1 OtherInfo1 MoreInfo1
Info2 Mystring2 OtherInfo2 MoreInfo2
Info3 Mystring3 OtherInfo3 MoreInfo3
....

Depois, quero ter minhas ocorrências em HTML:

<Uniquetag>Mystring1 - Info1</uniquetag>

Tanto o arquivo1 quanto o arquivo2 são dinâmicos e alterados periodicamente, eu corro meu script após cada alteração. Pode acontecer que o arquivo1 não contenha o Uniquetag, então nada deve ser procurado. Também é possível que MyString1 não pode ser encontrado no arquivo2. Nada deve ser adicionado nesse caso.

Alguém pode me indicar a direção certa para essa?

    
por mistraller 26.04.2016 / 19:03

2 respostas

0

Usando "perl"

Eu faria isso com um script Perl, conforme descrito no seguinte metacode:

for each line in file2:
    read line
    parse line into 4 fields with a pattern match
    build an associative array with $array{field2} = "field2 - field1"

slurp file1 into a single variable f

for each pattern match of /<UniqueTag>(match)</UniqueTag>/ in f:
    replace "match" with $array{match}
    
por 26.04.2016 / 19:32
0

RedGrittyBrick tem - apontado - as armadilhas de tentar analisar HTML de forma confiável.

Se, no entanto, seu HTML for tão bem formatado quanto você mostra, isso pode funcionar:

expr=
while read -r one two rest
do
  expr="$expr; s/<uniquetag>$two<\/uniquetag>/<uniquetag>$two - $one<\/uniquetag>/"
done < file2
sed "$expr" sourcehtml > targethtml

... onde você pode, se estiver satisfeito com os resultados, altere a expressão sed para:

sed -i "$expr" sourcehtml

... para que edite o arquivo sourcehtml no local.

Existem muitas maneiras pelas quais isso pode quebrar, algumas das quais são:

  • uma das duas primeiras colunas do arquivo2 tem uma barra invertida ou uma aspa simples
  • existem muitas linhas no arquivo2, fazendo com que a expressão sed se torne muito grande (contornando o sed várias vezes)
  • as tags são maiúsculas de forma diferente de "uniquetag" (note que coloquei a tag de abertura na minha resposta; em maiúsculas, se estiver errado).

Execução de amostra

Dadas as suas primeiras três linhas de "arquivo2" e ...

sourcehtml:

<uniquetag>other</uniquetag>
<othertag>other</othertag>
<uniquetag>Mystring1</uniquetag>
<uniquetag>other</uniquetag>
<uniquetag>Mystring2</uniquetag>
<othertag>other</othertag>
<uniquetag>Mystring3</uniquetag>
<uniquetag>other</uniquetag>
<othertag>Mystring3</othertag>

A saída é:

<uniquetag>other</uniquetag>
<othertag>other</othertag>
<uniquetag>Mystring1 - Info1</uniquetag>
<uniquetag>other</uniquetag>
<uniquetag>Mystring2 - Info2</uniquetag>
<othertag>other</othertag>
<uniquetag>Mystring3 - Info3</uniquetag>
<uniquetag>other</uniquetag>
<othertag>Mystring3</othertag>
    
por 28.04.2016 / 18:51