我在一个每隔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
如果“用户”不存在,如何添加,如果存在则忽略?
答案 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/;