Intereting Posts
Xmonad не меняет рабочее пространство Возможно ли установить Fedora 25 без GUI с USB? Как установить R 3.3.1 в моем собственном каталоге Как перечислить все пользовательские теги aptitude или теги пользователя для пакета? Некоторые сообщения ICMP-ответа не поступают в пространство пользователя в последних ядрах Замените новые строки char (^ M) во всех файлах, а затем переименуйте файл на основе строки char LibreOffice Calc не читал данные с помощью формулы (ошибка?) Как apt-delete-repository? Почему zsh (oh-my-zsh) заполняет каталоги, которые не существуют? Что захватывает мой Ctrl + s ключ? Сортировка ls по времени, когда слишком много файлов для одного вызова правильный способ монтирования sdcard в linux Мышь не регистрируется на * buntu Понимание этой конфигурации http-прокси iptables Есть ли легенда в каком-то месте, которое описывает все эти цветовые кодировки в нижней части byobu?

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

Я рассматривал это решение: используя sed для редактирования строк в файле с переменной и попытался применить его к моей ситуации, но я только недавно обнаружил sed и еще не получил его.

Если у меня есть файл, находящийся /tmp/mary.txt и он выглядит так:

 Mary had a little lamb with fleece as white as snow. Everywhere that Mary went, the lamb was sure to go. 

Я хочу заменить строку текста в этом файле, в частности:

Mary had a little lamb -> У Mary had 2 little lambs

Я использовал это:

 sed -i 's/*.had a little lamb.*/Mary had $(nproc) little lambs/' /etc/mary.txt 

Я использую -i для inplace и s/ для замены, и это вызывает ошибку:

 sed: 1: "mary.txt": extra characters at the end of g command 

Другая вещь, которую я пытаюсь сделать, заключается в замене слова «ягненок» на первую строку результатом echo $PATH

 sed -i 's/*.had a little lamb.*/ Mary had a little '$(echo $PATH)'/' /etc/mary.txt 

Это вызывает ту же ошибку, что и выше. Я знаю, что это два разных сценария, но может ли это показать мне, что я сделал не так, поэтому я могу использовать это в будущем.

Используйте двойные кавычки для правильной оценки var:

 $ var=43 $ sed "s/.*had a little lamb.*/Mary had $var little lambs/" file Mary had 43 little lambs with fleece as white as snow. Everywhere that Mary went, the lamb was sure to go. 

См . Ответ Джейкоба Миншалла относительно .* Вместо *. , Я написал команду sed с нуля, поэтому я не заметил ошибку в исходном коде.

Я думаю, это потому, что у вас есть *. в начале, но вы хотите иметь .*

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