perl搜索替换正在追加而不是替换

时间:2015-03-20 19:35:49

标签: perl cron

我在一个每隔X分钟运行一次的cron中有一个perl脚本。假设找到一个字符串并将其替换为包含更多数据的字符串:

s/remote_phonebook.data.1.name =/remote_phonebook.data.1.name = Users/;

我希望它看起来像这样:

之前:

remote_phonebook.data.1.name =

后:

remote_phonebook.data.1.name = Users

第一次运行它工作正常。但是,每增加一次它就会附加到行尾,所以3 cron作业后来我看到了:

 remote_phonebook.data.1.name = Users Users Users

如果“用户”不存在,如何添加,如果存在则忽略?

2 个答案:

答案 0 :(得分:2)

如果其中每一行都是新行,您可以尝试:

$s =~ s/remote_phonebook\.data\.1\.name =( Users|$)/remote_phonebook.data.1.name = Users/;

如果没有,请在评论中告诉我。

答案 1 :(得分:1)

提供适当的尾随上下文,例如=之后的空格(在Users之后=时不会执行任何操作):

s/remote_phonebook.data.1.name =\s*$/remote_phonebook.data.1.name = Users/;

或甚至(由ThisSuitIsBlackNot建议):

s/(remote_phonebook.data.1.name =)\s*$/$1 Users/;