在多个脚本中的变量赋值中附加新路径

问题描述 投票:0回答:1

我有一个在我的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中使用一些简单的命令执行此操作?

linux perl unix
1个回答
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之后匹配,因此从字符串中删除(匹配时)。

© www.soinside.com 2019 - 2024. All rights reserved.