<div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">   It's simpler with awk than perl:<br></div>
<br>
awk -v add=$1 '/<size>[0-9]+<\/size>/ {<br>
   n = $0<br>
   gsub( /[^0-9]/,"",n)<br>
   gsub( /[0-9]+/, n + add) }<br>
   { print }<br>
' "$2" > tempfile$$ && mv tempfile$$ "$2"<br><font color="#888888">
</font></blockquote><div><br>Them is fighting words.<br><br>[richarddice ~]$ cat input.xml <br><xmlsample><br> <size>13</size><br></xmlsample><br><br>[richarddice ~]$ perl -pe "s/<size>(\d+)<\/size>/'<size>' . (\$1 + 4) . '<\/size>'/e" input.xml <br>
<xmlsample><br> <size>17</size><br></xmlsample><br><br>"perl -e" means "execute the following perl code from the shell command line"<br>"perl -p" means "wrap the following perl code in an implicit 'while (<>) { ... } continue { print; }' block"<br>
<br>Adding them together gives "perl -pe".<br><br>One way to save your newly-modified output is with shell STDOUT redirection:<br><br>[richarddice ~]$ perl -pe "s/<size>(\d+)<\/size>/'<size>' . (\$1 + 4) . '<\/size>'/e" input.xml > output.xml<br>

<br>But if you wanted to be hardcore you could use "perl -i", which is in-place file editing.  Again combining perl invocation flags, you would get "perl -pie".  (Uuummm... pie!)<br><br>The /e suffix on the s/// substitution construct allows the evaluation of the math in-place.<br>
<br></div></div>Note that I had to escape the $1 to make it \$1 in the above command line example, lest the shell mangle it.  (This took me much longer to figure out than the actual Perl one-liner.)  If you do this in the confines of a program then it's not needed:<br>
<br>[richarddice ~]$ cat ./regex_math.pl<br>#!/usr/bin/perl -p<br><br>use warnings;<br>use strict;<br><br>s/<size>(\d+)<\/size>/"<size>" . ($1+4) . "<\/size>"/e;<br><br>[richarddice ~]$ perl ./regex_math.pl input.xml <br>
<xmlsample><br> <size>17</size><br></xmlsample><br><br>Personally, of the approaches I've seen so far I like the Python one, as it cares about the XML structure and doesn't just blindly chop into the text of the file.  I could probably dig up an equivalent Perl module to "import" to do the same thing, but it was just too much of a delight to use -p and s///e in the same place to pass up the opportunity.<br>
<br>Cheers,<br> - Richard<br><br>