在多个脚本的变量分配中附加新路径

时间:2018-08-28 04:53:14

标签: linux perl unix

我在我的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 :(得分:1)

您可以使用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之后匹配的,因此已从字符串中删除(匹配时)。