我在我的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中使用一些简单的命令来做到这一点?
答案 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
打开给定的文件并在各行中循环,以便''
中的代码被依次应用于每一行;处理过的行将打印在末尾 p>
-i
使其“就地”编辑输入文件(已更改),并使用.bak
保留备份
代码注释:
lookbehind类型的构造\K会丢弃所有先前的匹配项,因此在它之前的字符串中什么也不会“消耗”;因此,替换零件会粘在所需的琴弦上。我们确实需要放回";
,因为它是在\K
之后匹配的,因此已从字符串中删除(匹配时)。