Cristiano, Usando só sed...
sed "s:[<SignatureValue>.*<\/SignatureValue>]:\n $1:77;s:[<SignatureValue>.*<\/SignatureValue>]:\n $1:153;" arquivo Com esse comando estou incluindo \n antes dos caracteres da posicao 77 e 153 que estão entre os blocos <SignatureValue> e </SignatureValue>. Pra fazer direto uma alternativa copie esses XMLs pra um diretório DIR, depois rodar: for arquivo in $(ls DIR); do sed -i "s:[<SignatureValue>.*<\/SignatureValue>]:\n $1:77;s:[<SignatureValue>.*<\/SignatureValue>]:\n $1:153;" $arquivo; done; trocando DIR pela pasta que estão os XMLs Importante: faça backup pois este "sed -i" está alterando no próprio arquivo. Se não resolver poste aí de novo. Abraço, -- Luiz "Miguel" Axcar [email protected] Estudante de computação Bauru, São Paulo, Brasil "O próximo grande salto evolutivo da humanidade será a descoberta de que cooperar é melhor que competir" (Pietro Ubaldi) =====BEGIN FRACTAL-COMPRESSED SIGNATURE===== !PGP0XA4E77CCB/KVC=1FCBE41048A009550F68867928EB8DDF =====END FRACTAL-COMPRESSED SIGNATURE===== A versão 2.6 do fractal-descompressor (em breve!) vai transformar isso num MPEG de 72 minutos! 2010/6/2 Cristiano <[email protected]> > > Salve ilustres, bom dia. > > Estou tentando escrever um script usando o SED que identifique o conteúdo de > um campo dentro de um arquivo XML (tudo o que estiver entre as tags > <SignatureValue> e </SignatureValue>) e substitua este conteúdo por ele > mesmo, mas com uma quebra de linha a cada 76 caracteres. > > Pensei que daria para fazer com um loop, mas não sei como contar os > caracteres para fazer a quebra a cada 76. Estou esquentando os miolos ha um > par de horas e não consegui sequer um esboço do código. > > Alguém pode sugerir algo? > > <contexto> > Um bug em nosso sistema de emissão de NFe fez com que uma enormidade de > arquivos XML fossem gerados com erro. > > A assinatura do XML da NFe tem 172 caracteres, demarcados com a tag > <SignatureValue></SignatureValue>. > > O problema é que os caracteres da assinatura devem ter uma quebra de linha a > cada 76 caracteres (ou seja, no lugar dos 77º e 153º caracteres). > > De uns dias para cá, embora envie o arquivo no formato correto para os > webservices da receita, ao receber de volta com o protocolo de autorização, > tal sistema tem gravado este arquivo em uma única linha, removendo todas as > quebras. > > Com isso, meus clientes não consegue validar meus XMLs, pois o validador da > receita busca esta assinatura no banco de dados deles e compara com a do > arquivo, que é diferente justamente por causa da falta das quebras. > </contexto>
