Как передать аргументы perl при попытке изменить строку?

Я использую подход, предложенный в https://askubuntu.com/questions/434051/how-to-replace-a-string-on-the-5th-line-of-multiple-text-files, чтобы изменить первую строку архив. Предположим, что первая строка в file.txt

 keepme=change1me 

И я хочу получить

 keepme=newstring 

Проблема в том, что newstring хранится в var1

Я пытался:

 var1=newstring perl -i -pe 's/(keepme=)(.*)/$1${var1}/ if $.==1' ../file.txt perl ${var1} -i -pe 's/(keepme=)(.*)/$1$ARGV[0]/ if $.==1' ../file.txt 

В обоих случаях результат

 keepme= 

Если я сделаю

 perl -i -pe ${var1} 's/(keepme=)(.*)/$1$ARGV[0]/ if $.==1' ../file.txt Can't open s/(genome1=)(.*)/$1$ARGV[0]wq/ if $.==1: No such file or directory 

  • Считайте уникальные связанные значения в awk (или perl)
  • Разберите XML-файл, чтобы скопировать содержимое в другой файл в определенном месте в файле?
  • Как преобразовать поля фиксированной длины в файл в пространство с разделителями
  • Использование perl для изменения документа LaTeX
  • Я хочу найти дубликаты в файле и добавить символ в конец строки в первом совпадении
  • Извлечь часть строки, используя grep
  • как заменить выражение sed (изменить и распечатать только согласованную строку) с выражением perl?
  • Преобразование Perl-скрипта в bash
  • 2 Solutions collect form web for “Как передать аргументы perl при попытке изменить строку?”

    Начиная с вашей первой попытки, вы хотите, чтобы ${var1} расширялась оболочкой, и все остальные $ переменные защищались от нее (так что Perl расширяет их):

     perl -i -pe "s/(keepme=)(.*)/\$1${var1}/ if \$. == 1" ../file.txt 

    Двойные кавычки, а не одинарные кавычки, делают так, что Perl получает newstring вместо имени переменной, а экранирование других знаков доллара с помощью обратных косых черт делает оболочку передачей их через нетронутую.

    Чтобы получить доступ к переменной окружения в Perl, вы можете использовать $ ENV {var1}.

    Для этого вы можете экспортировать переменную, это будет означать, что переменная установлена ​​до тех пор, пока вы ее не отключите:

    export var1 = newstring

    perl -i -pe 's / (keepme =) (. *) / $ 1 $ ENV {var1} / if $. == 1' ../file.txt

    Альтернативно, если вы хотите установить переменную, которая будет использоваться командой Perl при ее выполнении, вы можете назначить ее перед вашей командой:

    var1 = newstring2 perl -i -pe 's / (keepme =) (. *) / $ 1 $ ENV {var1} / if $. == 1' ../file.txt

    Interesting Posts

    Понимание вывода lvdisplay в LVM / Linux

    Сервер SMB не работает после обновления с 3.5 до 3.6

    переименовать несколько файлов с помощью mv

    Как отправить / загрузить файл с ОС хоста в гостевую ОС в KVM? (Не для совместного использования папки)

    Система LFS не загружается или GRUB не может получить доступ / bood / grub при загрузке

    Могу ли я изменить владельца туннеля после его создания?

    Уведомления в стиле Ubuntu в Linux Mint

    Скрипт для проверки статуса входа SFTP?

    Есть ли способ узнать, кто может получить доступ к папке / папке?

    mod_evasive: белый список, из-за отсутствия журналов доступа?

    Терминальное имя pty в соответствии с IP-адресом источника

    Рекомендовать чтение для изучения конфигурации брандмауэров Linux для новичков?

    Клавиша ESC вызывает небольшую задержку в терминале из-за его поведения Alt +

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

    Как сравнить две даты в оболочке?

    Linux и Unix - лучшая ОС в мире.