sed '/<SubProduct>/{N;s/<SubProduct>$//}' filename > filename1
sed '/<\/SubProduct>/{N;s/<\/SubProduct>$//}' filename1 > filename
Eu tenho um arquivo XML grande com várias tags.
Uma das submarcações é a seguinte:
<Products>
<SubProduct> ----> this line is problem
<SubProduct>
<Name>One</Name>
</SubProduct>
<SubProduct>
<Name>One</Name>
</SubProduct>
<SubProduct>
<Name>One</Name>
</SubProduct>
<SubProduct>
<Name>One</Name>
</SubProduct>
<SubProduct>
<Name>One</Name>
</SubProduct>
</SubProduct> ----> this line is problem
</Products>
Como visto acima, as tags Products terão várias tags SubProduct.
No entanto, uma tag de abertura e fechamento adicional do SubProduct está aparecendo como mencionado acima (com o comentário 'esta linha é um problema').
A solução seria procurar duas tags SubProduct abertas consecutivas e duas tags SubProduct de fechamento consecutivas e substituir uma em cada uma por espaço.
Como posso conseguir isso usando sed
?
Como posso pesquisar por duas tags consecutivas onde as tags estão em linhas separadas, assim como não sei quantos espaços estarão presentes entre as duas tags consecutivas (pode ser 5 espaços ou 10 espaços antes ou depois da nova tag caractere de linha).
sed '/<SubProduct>/{N;s/<SubProduct>$//}' filename > filename1
sed '/<\/SubProduct>/{N;s/<\/SubProduct>$//}' filename1 > filename
Talvez você possa confiar no recuo:
grep -Ev '^ </?SubProduct' < file
Se sed
não for um requisito absoluto, você poderá usar este script Perl:
perl -ne 'if(/(<.?SubProduct>)/){next if $l=~/$1/} $l=$_; print' file.xml
Tags sed