Я создал сценарий оболочки, который принимает строку в качестве входных данных. Если строка содержит $
или &
, то мне нужно заменить эти символы на \$
и \&
. Я мог сделать это с помощью команды sed
. После этого я хочу заменить слово в определенном текстовом файле соответствующей строкой.
Пожалуйста, смотрите этот раздел для получения дополнительной информации.
Это мой файл.
test.txt
hello my root password is root.
Теперь я хочу изменить корень слова на строку. Строка может быть любой, которая может включать специальные символы, такие как $
или &
.
Если я хочу заменить root
на строку my&rootpa$$
, то она должна выглядеть как my\&rootpa\$\$
в текстовом файле.
Это мой снаряд
#!/bin/bash
dothis(){
rootpass=$(echo "$1" | sed -r 's/\$/\\$/g');
rootpass=$(echo "$rootpass" | sed -r 's/\&/\\&/g');
echo $rootpass;
sed -i "s/root/$rootpass/g" test.txt
}
dothis "my&rootpa$$";
Этот скрипт работает должным образом до echo $rootpass
, что означает, что когда я повторяю строку, он отображает my\&rootpa\$\$
.
Но в файле он выглядит как my&rootpa$$
а не my\&rootpa\$\$
. Что не так со сценарием?
Пожалуйста посоветуй.