我们如何用env变量替换所有文件中的PATH

时间:2012-03-12 17:40:39

标签: perl shell

我有大约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

有人可以告诉我该怎么办?

Shell:/ bin / bash 环境:Linux x86_64

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果用${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搜索一个不错的模块。