Bash:用perl动态替换

时间:2015-11-04 13:39:28

标签: regex bash perl

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

在bash中是否有可能动态执行我的perl替换状态,如:

GROUPNAME="$(id -g -n $USER)"
perl -pi -e 's/\(PLACEHOLDER\)/' + "$GROUPNAME" + '/g' filepath/file
如果我还能为占位符调整这种动态行为,那将是非常好的。但首先要做的事情。如何连接这些字符串?

2 个答案:

答案 0 :(得分:6)

删除" + "(空格和加号)。 Bash为相邻字符串进行自动连接。

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

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

答案 1 :(得分:1)

你要去

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