14.04 - Grep replace in multiple xml files - Ask Ubuntu
i have below command find .xml
files containing <active>true</active>
having <codepool>community</codepool>
after line on next line.
grep -rzl '<active>true</active>.*<codepool>community</codepool>' --include='*.xml' --color=always
now how combine sed
replace true
string inside <active>...
tag false
string along matched lines ?
you should use xml parsing tools xml data. xmlstarlet
choice. regular expressions not powerful enough (canonical reference)
if data looks like:
<root> <foo> <active>true</active> <codepool>private</codepool> </foo> <foo> <active>true</active> <codepool>community</codepool> </foo> </root>
then
xmlstarlet ed --update '//active[.="true" , ../codepool="community"]' -v false file.xml
produces
<?xml version="1.0"?> <root> <foo> <active>true</active> <codepool>private</codepool> </foo> <foo> <active>false</active> <codepool>community</codepool> </foo> </root>
here's awk program request. keep in mind it's fragile: if input changes, code stop working. use plain string operations.
awk ' begin { marker = "<codepool>community</codepool>" srch = "<active>true</active>" repl = "<active>false</active>" } index($0, marker) { = index(prev, srch) if (i > 0) prev = substr(prev, 1, i-1) repl substr(prev, i+length(srch)) } { if (prev) print prev prev = $0 } end {if (prev) print prev} '
Comments
Post a Comment