开发者

Shell variables in sed script [duplicate]

This question already has answers here: sed substitution with Bash variables (6 answers) Closed last month.

The sed command works as expected at the command prompt, but does n开发者_Go百科ot work in a shell script.

new_db_name=`echo "$new_db_name" | sed 's/$replace_string/$replace_with/'`

Why is that, and how can I fix it?


Use double quotes for the sed expression.

new_db_name=$(echo "$new_db_name" | sed "s/$replace_string/$replace_with/")


If you use bash, this should work:

new_db_name=${new_db_name/$replace_string/$replace_with}


This worked for me in using env arguments.

export a=foo
export b=bar

echo a/b | sed 's/a/'$b'/'

bar/b


Guys: I used the following to pass bash variables to a function in a bash script using sed. I.e., I passed bash variables to a sed command.

#!/bin/bash                            
function solveOffendingKey(){

    echo "We will delete the offending key in file: $2, in line: $1"
    sleep 5
    eval "sed -i '$1d' $2"
}


line='4'
file=~/ivan/known_hosts
solveOffendingKey $number $file

Kind regards!


depending on how your variables are initialized, you are better off using brackets:

new_db_name=`echo "$new_db_name" | sed "s/${replace_string}`/${replace_with}/"

Maybe I'm missing something but new_db_name=echo "$new_db_name" doesn't make sense here. $new_db_name is empty so you're echoing a null result, and then the output of the sed command. To capture stdout as a variable, backticks aren't recommended anymore. Capture output surrounded by $().

new_db_name=$(sed "s/${replace_string}/${replace_with}/")

Take the following example:

replace_string="replace_me"
replace_with=$(cat replace_file.txt | grep "replacement_line:" | awk FS" '{print $1}')

Where replace_file.txt could look something like:

old_string: something_old
I like cats
replacement_line: "shiny_new_db"

Just having the variable in the sed expresion $replace_with won't work. bash doesn't have enough context to escape the variable expression. ${replace_with} tells bash to explicitly use the contents of the command issued by the variable.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜