用于查找和替换的perl脚本或如果为空则插入

时间:2015-04-15 14:56:35

标签: perl

我正在尝试编写一个perl脚本来搜索配置文件中的以下行:

 remote_phonebook.data.1.url =

并做两件事之一:

  1. 如果=的一边是空白,请添加someString
  2. 如果有什么东西,用someString替换任何东西
  3. 这将插入正常:

    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/;
    

2 个答案:

答案 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使您无需重复所有内容。