Passing unix command to "sed"

I am trying a simple sed to replace a pattern but it fails ,,c an someone help in where iam wrong, here is what i run and i get no o/p

a=`cat abc.sh | grep -i pattern1 | egrep -iv "pattern2" `
sed 's/`echo $a`/XYZ=newvalue/g' < abc.sh > abc.sh_new

This is how my ksh -x of teh script looks like:

+ + cat abc.sh
+ grep -i pattern1
+ egrep -iv pattern2
a=XYZ=value
+ sed s/`echo $a` /$Env_TARGET_TARGET_DATABASE=$Tdb/g
+ 0< /tmp/scm_dir/IPA/env.sh 1> /tmp/scm_dir/IPA/env.sh_new

i also tried
sed 's/`cat abc.sh | grep -i pattern1 | egrep -iv "pattern2" `/XYZ=newvalue/g' < abc.sh > abc.sh_new

I related your last two post, and i tried the following..
Hope this will remove your blocking... :slight_smile:

$cat file

DEV_1_SOURCE_DATABASE=server1
DEV_1_SOURCE_AUDIT_DATABASE= server1
DEV_1_TARGET_DATABASE=server4
DEV_1_TARGET_AUDIT_DATABASE=server4

DEV_2_SOURCE_DATABASE=server2
DEV_2_SOURCE_AUDIT_DATABASE= server2
DEV_2_TARGET_DATABASE=server5
DEV_2_TARGET_AUDIT_DATABASE=server5

Solution 1:

script1.sh
a=` cat file | grep -w "DEV_2_TARGET_DATABASE" | cut -d '=' -f 2`
sed "s/\($a\)/newdb/g" file > file1
mv file1 file

The above script will take the value assigned for DEV_2_TARGET_DATABASE, and substitute that value i.e "server5" to newdb in the whole file content. ( even for DEV 4 or DEV 3)

Solution 2:

If you want to substitute only DEV_2_TARGET_DATABASE=server5 to DEV_2_TARGET_DATABASE=newdb

sed "s/\(DEV_2_TARGET_DATABASE=\)\(.*\)/\1newdb/g" file

Hope this helps..

Ad hoc (untested):

a=$( cat abc.sh | grep -i 'pattern1' | egrep -iv 'pattern2' )
sed -i "s/$a/XYZ=newvalue/g" abc.sh