简体   繁体   中英

Bash script for updating part of XML element value

I need a bash script for updating part of XML element value according to some other dynamic property.

For example, the XML file:

<?xml version="1.0"  encoding="ISO-8859-1"?>
 <Configure class="org.eclipse.something">
   <Set name="foo">foo-val</Set>
   <Set name="bar">bar-val</Set>
   <Set name="my-elm">/dont/matter/THIS_ONE_NEED_TO_BE_UPDATED</Set>
 </Configure>

Tried to use xmlstarlet with regexing, but it's not providing the result I want. I'm working on OSX 10.12.

Using xmlstarlet with below xpath expression worked fine for me. The below expression does in-pace substitution ( -L flag) of the XML file

xmlstarlet edit -L -u "/Configure/Set[@name='my-elm']" -v '/dont/matter/THIS_ONE_NEED_TO_BE_UPDATED' xml-file

Drop the -L flag to check if the replacement is occurring properly, and once successful add the same.

Checked on xmlstarlet (1.6.1) on OS X

Though it is strictly NOT advised to use sed for xml updates, this below logic will work for you,

sed "s/\(<Set name=\"my-elm\".*>\)[^<>]*\(<\/Set.*\)/\1\/dont\/matter\/THIS_ONE_NEED_TO_BE_UPDATED\2/" xml-file

add the -i.bak for in-place substitution of the file.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM