Как заменить PATH во всех файлах переменной env - PullRequest
1 голос
/ 12 марта 2012

У меня есть около 230 файлов, которые * .pl, * .txt, а некоторые из них * .conf, путь по умолчанию для текущей среды, скажем, /home/AD/USR/perl/5.8.0/bin/perl.Мне нужно заменить "/home/AD/USR" на переменную окружения ${USR_PATH}.Файлы, которые я хочу изменить, находятся в подкаталогах.Это означает, что мой скрипт должен найти e.g find .|xargs grep -l "/home/AD/USR" все файлы и затем заменить строку.

  • OLD: /home/AD/USR/perl/5.8.0/bin/perl

  • Новое: ${USR_PATH}/perl/5.8.0/bin/perl

Может кто-нибудь подсказать мне, как мне это сделать?

Оболочка: / bin / bash Окружение: Linux x86_64

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Если вы замените часть строки на ${USR_PATH}, вы будете ссылаться на переменную perl $USR_PATH, а не на переменную окружения, которая в perl называется $ENV{USR_PATH}.

perl -pi.bak -we 's#/home/AD/USR(?=/perl/5.8.0/bin/perl)#\$ENV{USR_PATH}#g' 
    *.pl *.txt *.conf

Использование заглядывания избавит вас от необходимости замены оставшейся части пути впоследствии.

Полагаю, вы хотите заменить его на буквальное значение.Если вы хотите заменить его фактическим значением в переменной среды, просто удалите обратную косую черту перед $ENV.

Хотя использование переменной среды кажется удобным и все, это уменьшит переносимость ваших скриптов.Почему бы не использовать файл конфигурации?Если бы вы сделали это с самого начала, у вас не было бы этой проблемы.Найдите CPAN для хорошего модуля.

1 голос
/ 12 марта 2012

perl -i -pe 's|/home/AD/USR/perl/5.8.0/bin/perl|\${USR_PATH}/perl/5.8.0/bin/perl|' <your files>

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