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

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

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

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

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

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

One Solution collect form web for “Как использовать переменные в команде sed”

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

 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 
  • Bash CD до тех пор, пока в определенной папке
  • одномерный массив в оболочке, не работающий для индексов больше 08
  • Правила UDEV Interfere
  • Синтаксис Ошибка при попытке запустить скрипт
  • Нужна помощь с скриптом оболочки, используемым для работы cron
  • Как использовать команду convert с bash для изменения размера всех изображений в заданном каталоге?
  • Найдите шаблон в файле и переместите его в новые файлы по одному
  • Какую команду idempotent можно использовать, чтобы символическая ссылка указывала на каталог?
  • Перемещение подкаталога в новый родительский каталог, где новое имя каталога увеличивается на 1
  • Как преобразовать строку в столбец
  • Извлечение символов после определенного текста
  • Linux и Unix - лучшая ОС в мире.