Suponho que você queira os valores de determinados elementos nesse arquivo XML e já sabe como especificá-los com o Xpath, por exemplo, //employee[@retired="no"]
:
Em seguida, para obter o valor desse único campo
xmlstarlet sel -t -v '//employee[@retired="no"]/name' thefile.xml
Ou quando você deseja, por exemplo, 2 elementos de cada funcionário, separados por um caractere de pipe:
xmlstarlet sel -t -m '//employee[@retired="no"]' -v name -o "|" -v "age" -nl file.xml
Basicamente, você especifica um modelo (-t), seguido de onde o modelo precisa ser aplicado a (-m seguido pelo Xpath onde corresponder), seguido pelos itens que você deseja extrair desse (-v para valor de).
O programa 'xml_grep', por outro lado, faz parte do XML :: Twig. A idéia do XML :: Twig é que ele não lê todo o xml na memória, mas trabalha no arquivo galho por galho. E isso tem como resultado que você não pode especificar certos Xpaths (por exemplo, galhos referindo-se a elementos irmãos). Quando os XPaths são simples o suficiente para serem especificados apenas em uma base de galho por galho, este programa permite, de fato, que arquivos muito grandes sejam processados, usando apenas uma quantidade limitada de memória.
Você não forneceu informações suficientes sobre a estrutura do arquivo XML ou sobre o tipo de XPaths que você deseja que os valores possam ajudar aqui.
E, é claro, como o XML é apenas um formato de texto, dependendo do formato do arquivo e da complexidade das perguntas, talvez até mesmo outros programas de texto simples possam funcionar:
grep -o '<name>[^<]*</name>' file.xml