2011-02-02 91 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