Команда sed работает как ожидалось в командной строке, но не работает в сценарии оболочки.
new_db_name='echo "$new_db_name" | sed 's/$replace_string/$replace_with/''
Почему это и как я могу это исправить?
Команда sed работает как ожидалось в командной строке, но не работает в сценарии оболочки.
new_db_name='echo "$new_db_name" | sed 's/$replace_string/$replace_with/''
Почему это и как я могу это исправить?
Используйте двойные кавычки для выражения sed
.
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
Ребята: я использовал следующее, чтобы передать переменные bash в функцию в bash script с помощью sed. I.e., я передал переменные bash команде 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
С уважением!
в зависимости от того, как инициализируются ваши переменные, вам лучше использовать скобки:
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 в качестве переменной, backticks больше не рекомендуется. Захват вывода окружен $()
.
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
не будет работать. bash не имеет достаточного контекста, чтобы избежать выражения переменной. ${replace_with}
сообщает bash явно использовать содержимое команды, выданной переменной.
me funciono asi desde la shell
x1="->"
x2="xxxxxxxxxxxxxxx"
sed -i s/$x1/$x2/g "file.txt"