我有一个在我的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中使用一些简单的命令执行此操作?
您可以使用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
之后匹配,因此从字符串中删除(匹配时)。