переменная не работает в сценарии оболочки внутри sed - PullRequest
0 голосов
/ 02 апреля 2019

у меня есть переменная jr=127.0.1.1 ysrnsk.Я должен заменить его на вторую строку моего /etc/hosts файла.sudo sed -i.bak '2 s/^.*$/'$jr'/' /etc/hosts это то, что я сделал.Но это не дает никакого вывода

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019
jr="127.0.1.1 ysrnsk"

^^ Предоставление кавычек здесь означает, что охватывает все данные, в противном случае ваш ввод только 127.0.1.1

sed -i.bak '2 s/^.*$/$jr/' /etc/hosts

-i аргумент делает редактирование на месте. Который не обеспечивает вывод. Если вы хотите «проверить» свои выходные данные перед редактированием, просто запустите

sed .bak "2 s/^.*$/'$jr'/" /etc/hosts

'' в bash - это буквально то, что вы вводите. Чтобы разрешить расширение параметров, например преобразование ваших переменных в их действительные значения, используйте двойные кавычки ""

sed .bak "2 s/^.*$/'$jr'/" /etc/hosts
                   ^   ^ These don't do anything, other than again, tell bash to interpret this literally

Итак:

sed .bak "2 s/^.*$/$jr/" /etc/hosts # This to see your output
sed -i .bak "2 s/^.*$/$jr/" /etc/hosts # This to commit it without output
0 голосов
/ 02 апреля 2019

Команда sed ничего не выводит, так как вы используете опцию -i

И вы должны все в двойных кавычках:

jr="127.0.1.1 ysrnsk"
sudo sed -i.bak "2 s/^.*$/$jr/" /etc/hosts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...