Para um trabalho XML simples como este, eu usaria xml2 e cut
. (ou sed
, ou awk
ou perl
).
find . -iname '*.xml' -exec bash -c 'xml2 < {}' \; | grep '/Name=' |
cut -d '=' -f2-
ou
find . -iname '*.xml' -exec bash -c 'xml2 < {}' \; | sed -n -e 's/^[^=]*\/Name=//p'
ou
find . -iname '*.xml' -exec bash -c 'xml2 < {}' \; |
awk -F'=' '/Name=/ {$1=""; sub(/^ /,"",$0); print }'
(A chamada da função sub()
na versão awk retira o espaço à esquerda depois de configurar $ 1 para "" - o awk não tem como excluir campos da linha de entrada, o melhor que você pode fazer é configurá-lo para Se preferir, split()
da linha em um array, exclua o (s) campo (s) que você não deseja e, em seguida, junte o array em uma string para impressão. awk
não tem uma função join()
como perl
, então você terá que escrever o seu próprio)
ou
find . -iname '*.xml' -exec bash -c 'xml2 < {}' \; |
perl -F= -lane 'if (m:/Name=:) { delete @F[0]; print @F}'
xml2
converte dados formatados em XML em um formato orientado a linhas adequado para processamento com utilitários de texto orientados a linhas, como awk
, ou sed
ou perl
e muitos outros. Ele vem com um programa 2xml
correspondente, que pode converter esse formato orientado por linha de volta para XML formatado corretamente.
Para tarefas mais complicadas, eu usaria xmlstarlet
xmlstarlet
é uma ferramenta de processamento XML que você pode usar para listar, consultar, extrair e modificar dados em arquivos XML.
Ambos estão disponíveis para o debian e outras distribuições Linux.
A melhor solução para IMO é usar uma linguagem como perl
ou python
que tenha uma biblioteca de análise XML e use isso. xmlstarlet
é ótimo para trabalhar com arquivos XML no shell, mas a construção da linha de comando para pesquisas muito complicadas se torna mais trabalhosa (e muito mais difícil de ler e depurar) do que apenas escrever um script em perl
ou python
o emprego. Isso é em parte porque eu faço muito mais programação nessas linguagens e acho muito mais fácil trabalhar com elas ... mas principalmente porque é melhor concentrar seu esforço de aprendizado em linguagens de uso geral que podem ser usadas para uma grande variedade de tarefas em linguagens / ferramentas específicas de domínio que só podem ser usadas para uma coisa muito específica.