Intereting Posts
Используйте rsync для зеркалирования источника для развертывания веб-сайта, но не для удаления выбранных файлов в месте назначения Сделать mount not list «фиктивными» файловыми системами (например, df) Поиск и замена Perl записывает каждый файл Почему sudo openvpn не может работать здесь? Как указать параметры конфигурации среды выполнения subversion? Как узнать, сколько ядер (в том числе эмулированных через HT и т. Д.) Доступны для пользователя? Как ядро ​​информирует демон OSPF о статусе физического интерфейса? Почему мой пакет был установлен в / opt? Выдача сертификата кукольного агента какое условие нам нужно использовать «.» в командной строке? Вывод gzip трубы для передачи Bluetooth? Как установить аппаратные зависимости в .deb-пакеты? Создание списка меню и выполнение задачи Цвет фона Затхура нельзя изменить? Создание дерева символических ссылок в существующих каталогах

Как использовать переменные в команде sed

Я пытаюсь запустить

sed -i "/$variable/c \$variable1' file.txt 

Но он не отображает никаких изменений в файле: file.txt .

Но одна и та же команда, без переменных работает нормально:

 sed -i "/variable/c \variable1' file.txt 

Делай это так:

 sed -i "/$variable/c \\${variable}1" file.txt 

Изменения:

  1. Если у вас есть \ перед a $ , это заставляет оболочку вставлять в строку литерал $ . Вместо этого добавьте лишний \ чтобы избежать первого, чтобы в буквальном \ будет напечатан.

  2. Если ваша переменная имеет буквы или цифры сразу после нее, заключите имя в {...} это отличает вашу переменную от несуществующей variable1 (если переменная не существует, оболочка будет расширять ее до нуля, а не искать более короткое имя).

  3. Будьте в согласии с вашими кавычками, вы начали с " , так что не заканчивайте с ' ! Переменные только расширяются в двойных кавычках.

Обратите внимание, что для отладки таких вещей вы можете использовать echo , глядя на выход, приведенная ниже команда покажет, что пошло не так:

 echo sed -i "/$variable/c \$variable1" file.txt 

Сравните это с;

 echo sed -i "/$variable/c \\${variable}1" file.txt