动态替换Perl

12 浏览
0 Comments

动态替换Perl

这个问题已经有了解答:

如何将$SHELL变量传递到Perl搜索和替换中

如何在Bash中连接字符串变量

我想要以编程方式替换小占位符为静态内容,比如用户名或者工作路径。

在Bash中有没有可能像这样动态地执行我的perl替换的状态:

GROUPNAME="$(id -g -n $USER)"
perl -pi -e 's/\(PLACEHOLDER\)/' + "$GROUPNAME" + '/g' filepath/file

如果我还能适应这个动态行为以替换占位符就会非常好。但首先要做的是如何连接这些字符串?

admin 更改状态以发布 2023年5月24日
0
0 Comments

你本来想用

GROUPNAME="$(id -g -n $USER)"
perl -i -pe's/\(PLACEHOLDER\)/'"$GROUPNAME"'/g' filepath/file

但是生成Perl代码是非常容易出错的,没有必要这样做。可以使用下列方法之一替代:

export GROUPNAME="$(id -g -n $USER)"
perl -i -pe's/\(PLACEHOLDER\)/$ENV{GROUPNAME}/g' filepath/file

或者

GROUPNAME="$(id -g -n $USER)" perl -i -pe's/\(PLACEHOLDER\)/$ENV{GROUPNAME}/g' filepath/file

0
0 Comments

移除" + "(空格和加号)。Bash会自动将相邻的字符串拼接。

echo 'hi!'t"here"  # hi!there

以这种方式生成Perl代码是安全的,因为id -g -n $USER的输出不包含\$@/

0