关于regex:Bash:用perl动态替换

Bash: Dynamic replacing with perl

本问题已经有最佳答案,请猛点这里访问。

我想用静态内容(如用户名或工作路径)以编程方式替换小占位符。

在bash中,我是否可以动态地执行Perl替换状态,比如:

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

如果我也能为占位符调整这种动态行为,那将是非常好的。但首先要做的是。如何连接这些字符串?


删除" +"(空间和加)。自动concatenation bash是不相邻的字符串。

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

在这种方式生成的Perl代码,因为仅仅是一个安全的产出id -g -n $USER不会包含\$/@或。


你是要

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

但没有理由的Perl代码生成。这是很容易出错的。相反,请使用下面的一种:

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

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