Supondo que o arquivo XML esteja bem formado:
<?xml version="1.0"?>
<header>
<prop-group name="ora_reconstruction">
<prop prop-type="TemplateCode">XXPO_PHYS_INV_ADJ_ES_AS</prop>
<prop prop-type="extractorVersion">10.1.3.4.2_1.5</prop>
</prop-group>
</header>
Usando o XMLStarlet :
xmlfile='ES - Physical Inventory Adjustment Report US PDF_es_ES.xlf'
LOBCODE=$( xml sel -t -v '//prop[@prop-type="TemplateCode"]' "$xmlfile" )
Isso usa XMLStarlet para extrair o valor do nó prop cujo atributo prop-type é TemplateCode . A variável LOBCODE obterá o valor XXPO_PHYS_INV_ADJ_ES_AS com o XML acima.
Às vezes, o XMLStarlet pode ser instalado como xmlstarlet em vez de xml .
Existem dois problemas com o seu código:
-
Você redireciona a saída do comando
sedpara um arquivo cujo nome é dado por$LOBCODE. Se$LOBCODEestiver vazio, esse redirecionamento falhará. O que eu suponho que você queria fazer era atribuir a saída desedà variávelLOBCODE. Isso é feito com uma substituição de comando, como mostrei acima. Note quesedé uma má escolha de ferramenta para analisar dados XML. -
Você instrui o
seda trabalhar com um arquivo chamadofilename. Para quesedtrabalhe no valor da variávelfilename, você precisará usar$na frente do nome da variável. Além disso, como o nome do arquivo possui espaços, você precisa duplicar a expansão da variável (você deve sempre fazer isso, independentemente). Portanto, você deve usar"$filename"(usei um nome de variável mais descritivo no meu código acima).