Linux“rpl”命令不替换文本


-1

我正在使用 rpl 程序在linux中取代 date(pdate( 在一些文件中。
但它说 A Total of 0 matches replaced in 1 file searched.
而grep输出 date( 是:

ariyan@ariyan-laptop:/var/www/moodle21$ grep -wR 'date(' admin/uploaduser.php
$today = make_timestamp(date('Y', $today), date('m', $today), date('d', $today), 0, 0, 0);

我正在使用 rpl 如下:

rpl -wR 'date(' 'pdate(' admin/uploaduser.php

问题是什么?


它会对该目录中的所有文件或只是那个文件进行bork吗?权限可能吗?
RobotHumans

@ aking1012:所有文件。所有权限都是777!
RYN

Answers:


3

我之前从未使用过这个工具,但是看一下“-w”的描述我猜测它处理的字边界与预期略有不同。如果你关闭“-w”,它应该工作。另外,在示例中,您已经为它提供了一个匹配的文件,因此-R也不会发挥作用。

尝试:

rpl 'date(' 'pdate(' admin/uploaduser.php

编辑:经过一番研究,我发现有一个 bug报道 因为rpl没有将标点符号作为单词边界处理,这就是为什么这不起作用。所以唯一的选择是使用其他工具。 Sed会想到这个任务,所以您可以使用以下内容完成它:

sed -i 's/\bdate(/pdate(/g' admin/uploaduser.php

这将以与rpl相同的方式执行内联替换(-i),并匹配开始日期并用pdate替换它们的内容。


但我有一些像 usergetdate( 要么 getdate( 我不希望那些被替换!
RYN

看起来rpl存在一个错误,它不会将标点符号作为单词边界处理。我能够使用以下sed语句来使用它 sed -i 's/\bdate/pdate/g'
Alex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.