Bash не работает sed на замену переменной
Столкнулся с проблемой: нужно заменить значение в переменной файла. Условно пусть есть перменная uno=1 dos=2. В тексте нужно заменить uno на dos. При использовании команды sed по принципу замены текста
echo "This is 1 This is 2" | sed 's%1%2%g'
команда работает
При попытке выполнения
echo " This is $uno This is $dos"
вывод работает, т.е. переменные определены, но при попытке замены с помощью sed - замена не производится. Для sed использовалась команда:
echo "This is $uno This is $dos" | sed 's%$(uno)%$(dos)'
Теоретически такая команда должна вывести текст "This is 2 This is 2", но выводится обычный текст. В чем может быть моя ошибка?
Ответы (1 шт):
Ошибки в команде:
... | sed 's%$(uno)%$(dos)%'
# отсутствует разделитель_^
Используется одинарные кавычки. Например, отличие одинарных кавычек от двойных:
var='str'
echo '$var'
>>> $var
echo "$var"
>>> str
Неверный вызов переменных:
var='ls'
echo "$(var)"
#______^___^ использование круглых скобок предназначено для вызова программ и команд
>>> var: команда не найдена
echo "$var"
>>> ls
echo "${var}"
>>> ls
Использование фигурных скобок зачастую помогает в ограничении имени переменной, к примеру, у нас есть 3 каталога - masterdir, slavedir, otherdir. В результате работы некоего скрипта мы получаем значение - master, slave или other соответственно. И что бы правильно получить имя каталога, к переменной нужно присоединить текст dir
var='master'
echo "/path/$vardir"
>>> /path/
#Так как переменной $vardir не объявлено, то и вывод будет пустой
echo "/path/${var}dir"
>>> /path/masterdir