We have some text
$> cat ./text
<div class='entry'>
<div class='pageurl'>temp/fhyw1</div>
<div class='context'>text</div>
<div class='subject'>testing</div>
<div class='notetext'></div>
<div class='signed'>USER</div>
<div class='author'>[email protected]</div>
<div class='color'>0</div>
<div class='visibility'>shared</div>
<div class='to'>_toself</div>
<div class='num'>4</div>
</div>
<div class='entry'>
<div class='pageurl'>temp/fhyw1</div>
<div class='context'>text</div>
<div class='subject'>testing</div>
<div class='notetext'></div>
<div class='signed'>USER</div>
<div class='author'>[email protected]</div>
<div class='color'>0</div>
<div class='visibility'>shared</div>
<div class='to'>_viewers</div>
<div class='num'>4</div>
</div>
And we need to replace _toself 'to' value with viewers, but only in divs, where 'author' equals a [email protected]
I think sed can helps you, but you should have some experience with it to formulate all condition with sed syntax.
So, we can read file in while loop, cut it into a div-blocks and change one value by another only if blocks 'authors' value is equal some email.
#!/bin/bash
mail="[email protected]"
to_value_old=_toself
to_value_new=viewers
while IFS= read -r line; do
if [[ -z "$( echo "$line" | grep -o -P "^<\/div>$" )" ]]; then
entry_block="${entry_block}${line}\n"
else
entry_block="${entry_block}</div>\n"
entry_block="$( echo -e "${entry_block}" )"
if [[ -n "$( echo "${entry_block}" | grep -P "\<div class=\'author\'\>${mail}\<\/div\>" )" ]]; then
entry_block="$( echo "${entry_block}" | sed -r -e "s/<div\ class='to'>${to_value_old}<\/div>/<div\ class='to'>${to_value_new}<\/div>/" )"
fi
echo "${entry_block}"
entry_block=""
fi
done < ./text
And we get
$> ./div.sh
<div class='entry'>
<div class='pageurl'>temp/fhyw1</div>
<div class='context'>text</div>
<div class='subject'>testing</div>
<div class='notetext'></div>
<div class='signed'>USER</div>
<div class='author'>[email protected]</div>
<div class='color'>0</div>
<div class='visibility'>shared</div>
<div class='to'>viewers</div>
<div class='num'>4</div>
</div>
<div class='entry'>
<div class='pageurl'>temp/fhyw1</div>
<div class='context'>text</div>
<div class='subject'>testing</div>
<div class='notetext'></div>
<div class='signed'>USER</div>
<div class='author'>[email protected]</div>
<div class='color'>0</div>
<div class='visibility'>shared</div>
<div class='to'>_viewers</div>
<div class='num'>4</div>
</div>
Done.