Expand variables in sed

19,334

Solution 1

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}

Solution 2

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.
Share:
19,334
abkrim
Author by

abkrim

Sys admin, ... BOFH

Updated on June 11, 2022

Comments

  • abkrim
    abkrim almost 2 years

    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
    
  • Carl Norum
    Carl Norum almost 11 years
    Necessary, but not sufficient to fix the OP's problem.
  • abkrim
    abkrim almost 11 years
    A lot of tanks. A bit confuse for me escaping. Work for me
  • abkrim
    abkrim almost 11 years
    A bit confuse for me. If put a ask, it's because, i was try several options. "", '', and dont' work for me. After read first response get a mayor knowledg and I can continue my work.
  • Lev Levitsky
    Lev Levitsky almost 11 years
    @AbdelKarimMateosSanchez You can mark the top answer as accepted then.