#!/bin/bash
# ideone boilerplate: run in temp dir
t=$(mktemp -d -t ideone.XXXXXXXX) || exit
trap 'rm -rf "$t"' ERR EXIT
cd "$t"
touch 1.html 2.html
# create test files
rm *.html
echo '<html><body>' > 1.html
echo '<div id="myID" style="display:none">1_1</div>' >> 1.html
echo '<div id="myID" style="display:none">another</div>' >> 1.html
echo '</body></html>' >> 1.html
echo '<div id="myID" style="display:none">1_2</div>' > 2.html
echo '<div id="myID" style="display:none">trouble</div>' > 'hard * problem .html'
# loop throught matching files
while IFS= read -r l_line
do
# get file name using exact match -o
l_name=$( echo "$l_line" | egrep -o ".*html" )
# get tag value using perl reg exp : values between >< ,
# \K (?=) remove brackets so without them we will get simple reg exp ">.*<"
# details https://u...content-available-to-author-only...e.com/questions/13466/can-grep-output-only-specified-groupings-that-match
l_new_name="$( echo "$l_line" | grep -oP ">\K.*(?=<)" ).html"
# for echoing let use this variable
l_cmd="mv -v $l_name $l_new_name"
# rename if file does not exist
if [[ -f $l_new_name ]]; then
echo "file $l_new_name already exists, no rename" >&2
else
echo "$l_cmd"
# execute and inform if works
eval $l_cmd || echo "ERROR " >&2
fi
done <<< $(grep -o '<div id="myID" style="display:none">.*</div>' ./*.html)