yesmani
September 11, 2009, 6:08am
1
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
skmdu
September 11, 2009, 6:53am
2
I related your last two post, and i tried the following..
Hope this will remove your blocking...
$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