почему я не могу заменить строку переменной на sed

#bash #sed

Вопрос:

 echo -n  "Username: "
read usernamert
echo -n "Password: "
read passwordt
echo -n "IP: "
read IPt
echo -n  "Channel: "
read channelt

t1=$(echo "www://$usernamet:$passwordt@$IPt/TEST/SOMETHING?channel=$channelt1amp;TRUE=1")

sed -i "s "t_1", "t_2" "$t1", "AAA" g" test.txt
 

ссылка должна выглядеть так
www://имя пользователя:пароль@$1.1.1.1/ТЕСТ/ЧТО-ТО?канал=2 и ИСТИНА=1

итак, этот вид ссылки я хочу изменить с помощью строки в файле test.txt

«t_1», «t_2»

но все равно получается ошибка. Где я ошибаюсь? Я также попытался поместить переменные в «» внутри переменной t1, но это не помогло.

Комментарии:

1. Если вам нужно соответствовать " буквально, вам нужно избежать этого: "

2. когда я добавляю этот эскейп ТОЛЬКО с » и повторяю его, я получаю это(со всеми входными данными пользователя) «www://имя пользователя:пароль@$1.1.1.1/ПРОВЕРИТЬ/ЧТО-ТО?канал=2 и TRUE=1», и я раскомментирую команду sed, чтобы проверить ее, и ошибок нет, но когда файл cat, он все еще существует, эта строка «t_1», «t_2», вместо этого www…..

3. Это проще, если вы используете одинарные кавычки: sed 's "t_1", "t_2" "'"$t1"'", "AAA" g'

4. Просто переключитесь на двойные кавычки вокруг переменной.

Ответ №1:

Ваши двойные кавычки ограничивают строки оболочки, а не используются буквально в sed шаблоне и замене.

Заключите операцию в одинарные кавычки sed , за исключением переменной.

 sed -i 's "t_1", "t_2" "'"$t1"'", "AAA" g' test.txt