0

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

我正在尝试通过 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

但我认为它不起作用,因为斜线和单引号。我试过逃避这些\但无济于事,有什么想法吗?

4

1 回答 1

2

操作员的替代分隔s符可用于避免栅栏。除非转义$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;
于 2012-08-29T14:14:38.310 回答