Pelo som, você simplesmente quer encontrar todo o conteúdo em arquivos que ocorre entre essas duas sequências de marcadores:
<List Variable name="lookups">
...
...
</Variable>
Para fazer isso, você pode usar este comando sed
:
$ sed '/<List Variable name="lookups">/,/<\/Variable>/!d;//d' file.dat
<Value>
<Value name="lookups" value="LSM_OPT"/>
<OTHER GARBAGE... >
<Value name="lookup_name" value="123_Done"/>
<OTHER GARBAGE... >
<Value name="lookup_name" value="XYZ_DONE"/>
<OTHER GARBAGE... >
Isto imprime todas as linhas entre elas, mas omite as duas linhas marcadoras.
Como funciona
O texto acima procura uma linha que corresponda ao seu padrão inicial, <List Variable name="lookups">
seguida por todas as linhas até encontrar a segunda linha correspondente, <\/Variable>
. Para linhas entre elas, sed
não as excluirá, !d
. Para todas as outras linhas, o d
in !d
as excluirá. O segundo //d
apaga as linhas do marcador.
Se você gostaria de fazer o acima, e também imprimir as linhas do marcador, você pode alterar o comando sed
acima para isso:
$ sed '/<List Variable name="lookups">/,/<\/Variable>/!d' file.dat
<List Variable name="lookups">
<Value>
<Value name="lookups" value="LSM_OPT"/>
<OTHER GARBAGE... >
<Value name="lookup_name" value="123_Done"/>
<OTHER GARBAGE... >
<Value name="lookup_name" value="XYZ_DONE"/>
<OTHER GARBAGE... >
</Variable>