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

perl search replace is appending not replacing

我在每 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

如何做到"Users"不存在就添加,存在就忽略?

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

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

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

提供适当的尾随上下文,例如 = 之后只有空格(当 = 之后有 Users 时,它不会做任何事情):

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

甚至(如 ThisSuitIsBlackNot 所建议):

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