que tal no awk?
$ awk -F"[<>]" '/\"a\"|\"c\"/{print $3}' test.t
a value
c value
$ cat test.t
<object>
<class = "a"> a value </class>
<class = "b"> xyz </class>
<class = "c"> c value </class>
<class = "d"> xyz </class>
</object>
Eu tenho um arquivo xml com a seguinte estrutura:
<object>
<class = "a"> xyz </class>
<class = "b"> xyz </class>
<class = "c"> xyz </class>
<class = "d"> xyz </class>
</object>
Eu preciso extrair apenas algumas tags.
Por exemplo: class="a" e class="c"
Para remover uma classe, tenho o seguinte comando:
sed -n '/<class name="a"/,/<\/class/p' sourcefile.xml >> result.xml
Então, para duas tags eu poderia usar o seguinte:
sed -n '/<class name="a"/,/<\/class/p' sourcefile.xml >> result.xml
sed -n '/<class name="c"/,/<\/class/p' sourcefile.xml >> result.xml
mas, duas iterações seriam feitas no arquivo. É possível fazer isso em uma única iteração?
Atualização:
Saída:
<class = "a"> xyz </class>
<class = "c"> xyz </class>
que tal no awk?
$ awk -F"[<>]" '/\"a\"|\"c\"/{print $3}' test.t
a value
c value
$ cat test.t
<object>
<class = "a"> a value </class>
<class = "b"> xyz </class>
<class = "c"> c value </class>
<class = "d"> xyz </class>
</object>