2011-02-02 89 views
3

我不確定這究竟是什麼,但我已經能夠重現我的問題與兩個單線。如何限制Perl的字符串在s ///中轉義替換字符串?

從文件 '的test.txt' 啓動含有下列:

foo 

運行下面的命令(在bash)後:

perl -n -e "s/(\w)oo/$1ar/; print;" test.txt 

輸出是 'far'

但是,當我引入包含替換字符串的變量時,

perl -n -e '$bar = q($1ar); s/(\w)oo/$bar/; print;' test.txt 

輸出是'$1ar'。

我需要更改哪些內容以便第二個程序還會輸出'far'以及我需要學習哪些關鍵字才能使此答案成爲Googleable?

另外,我試着改變第二個到s /// e,沒有任何效果。

編輯:這不是真的我想問的問題,這是here

回答

6

這個工作對我來說(在bash,你可能需要改變你的報價):

perl -n -e '$bar = "\${1} . ar"; s/(\w)oo/$bar/ee; print;' test.txt 

ee evals更換部件爲文本字符串。請參閱perlop(1)

+1

`$ bar =「\ $ 1.ar」`或`$ bar = q($ 1.ar)`就足夠了。 `$ bar = q($ 1。「ar」)`警告是乾淨的。 – mob 2011-02-02 23:16:37

+0

哈哈,這對我的玩具劇本起作用,但不適用於完整版本(一個關鍵方面已被刪除)!我會接受這個問題,因爲它回答了問題,然後提出一個新問題。 – 2011-02-02 23:30:30

1

我希望有人將與更好的東西一起走,但是這個工作對我來說:

perl -n -e '$bar=q($1."ar"); s/(\w)oo/eval($bar)/e; print;' test.txt 

我設置$酒吧到串接$1爲「AR」的表情讓我能EVAL它在替換部分(使用e標誌)。

1

/ee by @maxelost是正確的。

這個工作在Perl程序
$bar = q("${1}ar");
$str = "foo";
$str =~ s/(\w)oo/$bar/ee;
print $str;

所以我猜這個作品在bash:

perl -e '$bar = q("${1}ar"); s/(\w)oo/$bar/ee; print;' test.txt

在窗口:

perl -e "$bar = q(\"${1}ar\"); s/(\w)oo/$bar/ee; print;" test.txt