我想以编程方式将小占位符替换为静态内容,例如用户名或工作路径。
在bash中是否有可能动态执行我的perl替换状态,如:
GROUPNAME="$(id -g -n $USER)"
perl -pi -e 's/\(PLACEHOLDER\)/' + "$GROUPNAME" + '/g' filepath/file
如果我还能为占位符调整这种动态行为,那将是非常好的。但首先要做的事情。如何连接这些字符串?
答案 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