递归搜索并替换为/和'

时间:2012-08-29 14:06:58

标签: perl shell unix replace xargs

我已经搜索过,但没有找到解决方案,很抱歉,如果之前已经回答过这个问题,那我就不擅长了。

我正在尝试进行递归搜索,并通过SSH替换所有文件。

到目前为止,我已经得到了这个:

find . -type f | xargs -d "\n" perl -pi -e 's/$this->helper('catalog/product')->getPriceHtml/$this->getPriceHtml/g'

我正在尝试替换它:

$this->helper('catalog/product')->getPriceHtml

用这个:

$this->getPriceHtml

但我觉得它因为斜线和单引号而无效。我试图用\逃避这些,但无济于事,有什么想法吗?

1 个答案:

答案 0 :(得分:2)

s运算符的备用分隔符可用于避免 picket fences 。除非转义$this,否则$将被视为变量。括号也必须转义。否则他们组成一个捕获组。由于它是单行并且引号已经用尽,因此单引号已使用十六进制转义编码。以下应该有效:

s{\$this->helper\(\x{27}catalog/product\x{27}\)->getPriceHtml}{\$this->getPriceHtml}g;

或者:

s{(?<=\$this)->helper\(\x{27}catalog/product\x{27}\)(?=->getPriceHtml)}{}g;