我想以編程方式將靜態內容(如用戶名或工作路徑)替換爲小佔位符。Bash:動態替換perl
有沒有在bash的可能性,我可以動態地執行我的Perl更換狀態,如:
GROUPNAME="$(id -g -n $USER)"
perl -pi -e 's/\(PLACEHOLDER\)/' + "$GROUPNAME" + '/g' filepath/file
這將是極大的好,如果我也能適應的佔位符此動力學行爲。但首先是事情。如何連接這些字符串?
我想以編程方式將靜態內容(如用戶名或工作路徑)替換爲小佔位符。Bash:動態替換perl
有沒有在bash的可能性,我可以動態地執行我的Perl更換狀態,如:
GROUPNAME="$(id -g -n $USER)"
perl -pi -e 's/\(PLACEHOLDER\)/' + "$GROUPNAME" + '/g' filepath/file
這將是極大的好,如果我也能適應的佔位符此動力學行爲。但首先是事情。如何連接這些字符串?
刪除" + "
(空格和加號)。 Bash自動連接相鄰的字符串。以這種方式
echo 'hi!'t"here" # hi!there
生成Perl代碼是唯一安全的,因爲id -g -n $USER
輸出將不包含\
,$
,@
或/
。
@ikegami:這個用例是安全的。也許爲了清晰起見使用'sed'。 –
它來自可信輸入('id')。 –
你所追求的
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
不知道這是一個很好的比賽,因爲它是關於變量。 –