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