我正在尝试编写一个perl脚本来搜索配置文件中的以下行:
remote_phonebook.data.1.url =
并做两件事之一:
这将插入正常:
s/remote_phonebook\.data\.1\.url = /remote_phonebook.data.1.url = someString/;
但是如果someString已经存在,它会将它看起来像这样:
remote_phonebook.data.1.url = someString someString
如果someString已经存在,这将替换正常,但如果空白则不会插入。
s/remote_phonebook\.data\.1\.url = someString/remote_phonebook.data.1.url = someString/;
答案 0 :(得分:3)
.*
是你的朋友,在这里。这意味着"匹配0或更多(*
)任何字符(.
)":
s/remote_phonebook\.data\.1\.url =.*/remote_phonebook.data.1.url = someString/;
因此,无论=
之后是否有任何,您最终都会得到您想要的内容。确保您从该行的开始匹配(因此" xxxremote_phonebook ..."赢得匹配),并允许更多(或更少)空格在" ="之前,我使用:
s/^remote_phonebook\.data\.1\.url\s*=.*/remote_phonebook.data.1.url = someString/;
答案 1 :(得分:-1)
s/^\s*remote_phonebook\.data\.1\.url\s*=\K.*/someString/;
.*
将匹配任何换行符。(
\K
使您无需重复所有内容。