在sed脚本中的shellvariables

sed命令在命令提示符下按预期工作,但在shell脚本中不起作用。

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

sedexpression式使用双引号。

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

如果你使用bash,这应该工作:

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

这在我使用env参数。

 export a=foo export b=bar echo a/b | sed 's/a/'$b'/' bar/b 

伙计们:我用下面的命令将bashvariables传递给bash脚本中的函数。 也就是说,我将bashvariables传递给sed命令。

 #!/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 

亲切的问候!

取决于你的variables是如何初始化的,你最好使用括号:

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

也许我失去了一些东西,但new_db_name=echo "$new_db_name"在这里没有意义。 $ new_db_name是空的,所以你回显空结果,然后是sed命令的输出。 要将stdout作为variables捕获,不推荐使用反引号。 捕获由$()包围的输出。

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

以下面的例子:

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

其中replace_file.txt可能看起来像这样:

 old_string: something_old I like cats replacement_line: "shiny_new_db" 

只是在sed expresion $replace_withvariables将无法正常工作。 bash没有足够的上下文来逃避variablesexpression式。 ${replace_with}告诉bash明确地使用由variables发出的命令的内容。