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
sed
para um arquivo cujo nome é dado por$LOBCODE
. Se$LOBCODE
estiver 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
sed
a trabalhar com um arquivo chamadofilename
. Para quesed
trabalhe 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).