sed/awk, remplacer plusieurs occurences entre deux balises html
2016-03-01
sed -ri "/<childProjects>/,/<\/childProjects>/ { s/monsvi-/MAINTENANCE-$GOROCO-monsvi-/g; }" $config_file
Attention, il faut prendre garde au cas où les tags html ne seraient pas uniques :
$ cat text.txt
<a>
<b>toto</b>
<c>toto</c>
<b>toto</b>
</a>
$ cat text.txt | sed -r '/<b>/,/<\/b>/ { s/toto/t*t*/g; }'
<a>
<b>t*t*</b>
<c>t*t*</c>
<b>t*t*</b>
</a>
Si on a la chance que le tag de fin est sur la même ligne :
$ cat text.txt | sed -r '/<b>/,0 { s/toto/t*t*/g; }'<a>
<b>t*t*</b>
<c>toto</c>
<b>t*t*</b>
</a>
Toutefois, je conseille de préférer awk
dont le comportement est plus sûr.
$ cat text.txt | awk '/<b>/,/<\/b>/ { gsub("toto", "t*t*"); print; next } { print } '
<a>
<b>t*t*</b>
<c>toto</c>
<b>t*t*</b>
</a>