我有大约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
答案 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搜索一个不错的模块。