вывод команды> sed replace после определенной строки - PullRequest
0 голосов
/ 26 июня 2019

Здравствуйте. Я пытаюсь вставить вывод команды output> sed replace после определенной строки в файле как часть пользовательских данных при загрузке компьютера

[centos@ip-192-168-2-22 scylla]$ sudo sed -i.bak 's/broadcast_rpc_address: : /broadcast_rpc_address:\/$hostname -i | awk '{print $2}'/' /etc/scylla/scylla.yaml

файл в данный момент

broadcast_rpc_address:

заменить на

broadcast_rpc_address: (the ip of the machine)

1 Ответ

1 голос
/ 27 июня 2019

Примерно так должно работать:

sed -i.bak "s/broadcast_rpc_address:/broadcast_rpc_address: $(hostname -i)/" /etc/scylla/scylla.yaml

Это заменит broadcast_rpc_address: на broadcast_rpc_address: $(hostname -i).Теперь, поскольку эта строка в двойных кавычках, а не в одинарных, она говорит оболочке интерпретировать некоторые магические последовательности внутри строки.В частности, $(somecommand) означает запуск некоторой команды и вставку ее вывода в строку.Конечно, замените «hostname -i» в команде, которую я дал выше, на все, что вы хотите (это может быть даже целый конвейер.

В вашей первоначальной попытке использовалось то, что начиналось с $hostname. Этот синтаксис,$hostname, не запускает команду hostname, а ищет переменную с именем hostname, что не соответствует вашим требованиям. Вместо этого вам нужен синтаксис * 1013. * В вашей первоначальной попытке также были проблемы с вложеннымцитаты, которые не работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...