在sed脚本中的shellvariables
sed命令在命令提示符下按预期工作,但在shell脚本中不起作用。
new_db_name=`echo "$new_db_name" | sed 's/$replace_string/$replace_with/'`
为sed
expression式使用双引号。
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_with
variables将无法正常工作。 bash没有足够的上下文来逃避variablesexpression式。 ${replace_with}
告诉bash明确地使用由variables发出的命令的内容。