добавить новый путь в назначении переменной в нескольких сценариях - PullRequest
0 голосов
/ 28 августа 2018

У меня есть переменная окружения, объявленная в моих скриптах perl, как показано ниже. Эта переменная может немного отличаться в разных файлах perl. В первом файле:

$ENV{MY_LIBS} = "$MY_PATH/bin:$HOME/PACKAGE1:$HOME/PACKAGE2";

Во втором файле:

$ENV{MY_LIBS} = "$MY_PATH/bin:$HOME/MYLIBS1:$HOME/PACKAGE2";

Теперь скажите, что я хочу добавить $MY_PATH/lib ко всем таким файлам, чтобы они выглядели так:

В первом файле:

$ENV{MY_LIBS} = "$MY_PATH/bin:$HOME/PACKAGE1:$HOME/PACKAGE2:$MY_PATH/lib";

Во втором файле:

$ENV{MY_LIBS} = "$MY_PATH/bin:$HOME/MYLIBS1:$HOME/PACKAGE2:$MY_PATH/lib";

Как я могу сделать это с помощью простой команды в Linux?

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете использовать Perl "one-liner" вместо простой команды в Linux"

perl -i.bak -pe's/\$ENV{MY_LIBS}.*\K"\s*;/:$MY_PATH\/lib";/' file1 file2 ...

Я предполагаю, что $MY_PATH обозначает буквальную строку, иначе я не знаю, откуда она взялась.

Переключатели означают:

  • -e означает, что то, что следует внутри '', оценивается как код Perl, поэтому программа следует

  • -p открывает заданные файлы и проходит по строкам так, что код в '' последовательно применяется к каждой строке; обработанная строка печатается в конце

  • -i позволяет редактировать входные файлы «на месте» (они изменены), а при .bak резервная копия сохраняется

Комментарии к коду:

Конструкция lookbehind -типа \ K отбрасывает все предыдущие совпадения, поэтому ничего не «расходуется» из строки перед ней; таким образом, запасная часть прикрепляется к желаемой струне. Нам нужно вернуть ";, поскольку это было сопоставлено после \K и, таким образом, было удалено из строки (при сопоставлении).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...