Use sed:
sed -n -e '/definition/,/\/definition/ p' definitions.xml
Estou usando um XML com definições neste formato -
<definition name="ticketOpen" extends="ticketUpdate">
<put name="title" value="Open Ticket" />
<put name="mainForm" value="open.jsp" />
<put name="XYZ" value="PQR" />
...
</definition>
Se eu quiser pesquisar a definição de "ticketOpen", posso usar grep
como este -
grep "definition *name *= *\"ticketOpen\"" definitions.xml
No entanto, isso só retorna a primeira linha da definição. Como posso especificar que depois de encontrar a primeira linha correspondente, grep
(ou qualquer outro utilitário) deve procurar a tag de fechamento </definition>
e imprimir todas as linhas entre elas?
O comando xml2
converterá o XML em texto simples.
$ cat foo.xml
<?xml version='1.0'?>
<doc name="document">
<object name="foo">
<key name="bar">baz</key>
</object>
<definition name="ticketOpen" extends="ticketUpdate">
<put name="title" value="Open Ticket" />
<put name="mainForm" value="open.jsp" />
<put name="XYZ" value="PQR" />
</definition>
</doc>
$ xml2 < foo.xml
/doc/@name=document
/doc/object/@name=foo
/doc/object/key/@name=bar
/doc/object/key=baz
/doc/definition/@name=ticketOpen
/doc/definition/@extends=ticketUpdate
/doc/definition/put/@name=title
/doc/definition/put/@value=Open Ticket
/doc/definition/put
/doc/definition/put/@name=mainForm
/doc/definition/put/@value=open.jsp
/doc/definition/put
/doc/definition/put/@name=XYZ
/doc/definition/put/@value=PQR
Eu não sei como é o resto do seu documento XML, mas assumindo que esta é a única instância de definition
, você pode diretamente grep
para isso.
Parece que isso é algo que seria mais apropriado usar o xpath. Se essa é uma opção, posso obter uma linha de comando de amostra.
Este comando está disponível no Ubuntu a partir do pacote libxml-xpath-perl
.