abkrim
abkrim

Reputation: 3692

Expand variables in sed

I need use sed into bash script, for add lines after any line numer of script with some pair of values (below work)

sed -i.bak '14i\some_text=some_text' file

But I need on script bash (sh) for expand variables (below not work)

sed -i.bak '$number_linei\$var1=$var2' $var3

Upvotes: 19

Views: 28556

Answers (2)

Carl Norum
Carl Norum

Reputation: 225242

Just use double quotes instead of single quotes. You'll also need to use {} to delimit the number_line variable correctly and escape the \, too.

sed -i.bak "${number_line}i\\$var1=$var2" $var3

I'd personally prefer to see all of the variables use the {}, ending up with something like:

sed -i.bak "${number_line}i\\${var1}=${var2}" ${var3}

Upvotes: 31

Lev Levitsky
Lev Levitsky

Reputation: 65851

Change single quotes to double quotes:

man bash:

   Enclosing  characters  in  single quotes preserves the literal value of
   each character within the quotes.

   Enclosing  characters  in  double quotes preserves the literal value of
   all characters within the quotes, with the exception of $, `,  \,  and,
   when  history  expansion  is enabled, !.  The characters $ and ` retain
   their special meaning within double quotes.

Upvotes: 5

Related Questions