-   Programming (
-   -   variable substitution in sed (

gaynut 07-14-2008 07:26 AM

variable substitution in sed

This is a simple stuff yet i couldn't solve it myself.
The issue goes as below,

i need to place fprintf after every pattern matched in a C code.
eg: if a c code has

then a printf should be placed after the line as below

fprintf (stderr,"Accessing alloc id %x", ALLOCID_2x0023);

there are list of files to be modified whose list is there in the "file_list". the pattern to be searched are there in "alloc_ids".

i wrote a code,

while read line
while read line1
grep $line $line1
if [ $? -eq 0 ]
##echo " The $line in file $line1"
sed '/Alloc(/a\
fprintf(stderr,"Acccesing alloc id %x",$line);' < $line1 > $line1.swp


done <file_list
done <alloc_ids

The problem is, i'm not able to do variable substitution for the variable "$line" which has the pattern.

If i put quotes instead of single quote for the sed, it throws an error "cannot parse ...bla..bla.."

On the whole , it just writes the entire fprintf line as a string in the new file inclusive of $line being written as such without any substitution.

Any help would be appreciated..please


~ gaynut

pixellany 07-14-2008 08:38 AM

The normal single quotes used with SED will not allow the shell to expand a variable name--eg "$var". To fix this, use double-quotes for SED. Then, if you need the (SED) special meaning of "$" (end of line), you would escape it with "\".

Keep in mind that--in many situations--quoting is not required at all. Many books say "use single-quotes to be on the safe side", but you have to then recognize when the single-quotes won't work.

Any kind of quoting is only required to prevent a process from interpreting one or more characters rather than passing it on the next process.

All times are GMT -5. The time now is 10:36 AM.