Как передать аргументы 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 

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

  • Печатать атрибуты из двух тегов вместе
  • Установка CPAN не выполняется в репозитории Arch
  • конвертировать в эпоху и обратно
  • Perl-скрипт в bin, который вызывает файл
  • Как исправить эту сломанную установку CPAN и Perl
  • Могут ли команды tr быть закодированы, чтобы избежать нескольких tr процессов в конвейере?
  • Почему perl regex находит шаблон \\ label \ {. *? \}, Но не \\ ref. *? \} Или \\ autoref \ {. *? \} В файлах TeX?
  • Как заменить недопустимые символы на подчеркивание с помощью Perl?
  • Последствия для безопасности работы perl -ne '...' *
  • Как присоединиться к строкам с одиночными столбцами максимум до 4 столбцов в одной строке?
  • Удалить пробелы после определенного символа
  • Linux и Unix - лучшая ОС в мире.