The goal is to replace me@gmail.com with dba@gmail.com for all shell scripts.
Fortunately, all shell scripts are located from one directory; otherwise, will need to find all locations.
Check crontab to find possible directory location for shell scripts.
[vagrant@oracle-12201-vagrant ~]$ crontab -l
5 4 * * * /home/vagrant/scripts/test.sh something > /tmp/test.out 2>&1
[vagrant@oracle-12201-vagrant ~]$
[vagrant@oracle-12201-vagrant ~]$ crontab -l|grep -v '#'|grep sh|awk '{print $6}'|sort -u
/home/vagrant/scripts/test.sh
[vagrant@oracle-12201-vagrant ~]$
Check directory for shell scripts.
[vagrant@oracle-12201-vagrant scripts]$ ls -l
total 12
-rwxrwxr-x. 1 vagrant vagrant 25 Feb 4 21:15 dt.sh
-rwxrwxr-x. 1 vagrant vagrant 20 Feb 4 21:14 test.sh
[vagrant@oracle-12201-vagrant scripts]$
Check shell scripts containing emails to modify.
[vagrant@oracle-12201-vagrant scripts]$ grep 'me@gmail.com' *.sh|grep sh|awk -F':' '{print $1}'|sort -u|grep -v edit_email.sh
dt.sh
test.sh
[vagrant@oracle-12201-vagrant scripts]$
Create edit_email.sh to modify email.
[vagrant@oracle-12201-vagrant scripts]$ cat edit_email.sh
for infile in $(grep 'me@gmail.com' *.sh|grep sh|awk -F':' '{print $1}'|sort -u|grep -v `basename $0`)
do
echo $infile
sed 's/\bme@gmail.com\b/dba@gmail.com/g' $infile > tmp.$$
mv tmp.$$ $infile
chmod 755 $infile
grep 'gmail.com' $infile
done
[vagrant@oracle-12201-vagrant scripts]$
Run edit_email.sh and verify results.
[vagrant@oracle-12201-vagrant scripts]$ ./edit_email.sh
dt.sh
echo dba@gmail.com
test.sh
export PAGER_EMAIL="dba@gmail.com"
[vagrant@oracle-12201-vagrant scripts]$
[vagrant@oracle-12201-vagrant scripts]$ grep 'me@gmail.com' *.sh|grep sh|awk -F':' '{print $1}'|sort -u|grep -v edit_email.sh
Here is an improvement for the code thanks to Jared Still
Filter basename before sort.
Use grep -il
[vagrant@oracle-12201-vagrant scripts]$ cat e.sh
for infile in $(grep 'me@gmail.com' *.sh|grep sh|awk -F':' '{print $1}'|grep -v basename $0|sort -u)
do
echo $infile
done
for infile in $(grep -il 'me@gmail.com' *.sh 2>/dev/null | grep -v $(basename $0) | sort -u )
do
echo $infile
done