Ansible:是否有可能搜索替换单个单词

时间:2014-03-14 07:06:22

标签: linux ansible ansible-playbook

lineinfile模块中,它取代了整行。

如果线条很长,我必须再次重复整行。

让我们假设我想替换文件中的单个词:

#abc.conf
This is my horse

这是剧本:

 - lineinfile: dest=abc.conf
               state=present
               regexp='horse'
               line='This is my dog'
               backup=yes

有没有办法实现像sed 's/horse/dog/g'

这样的东西

3 个答案:

答案 0 :(得分:30)

1.6版本以来可用的新模块replace

- replace:
    dest=abc.conf
    regexp='horse'
    replace='dog'
    backup=yes

答案 1 :(得分:18)

您可以使用backreferences检索该行的其他部分(不应更改):

 - lineinfile: dest=abc.conf
               state=present
               regexp='^(.*)horse(.*)$'
               line='\1dog\2'
               backup=yes
               backrefs=yes

答案 2 :(得分:2)

如果您需要在一个块中执行更多替换操作并且您在本地拥有该文件,您可能需要考虑使用模板,该模板替换模板文件中的变量并将文件复制到远程:

public async Task<IHttpActionResult> Get([FromUri] ListSelectionOptionsWithFilter options)
{
   //query something
}

public class ListSelectionOptionsWithFilter
{
    public int? Skip { get; set; }
    public int? Take { get; set; }
    public List<ListSortOption> Sort { get; set; }
    public ListFilterOptions Filter { get; set; }
}

public class ListFilterOptions
{
    public string Logic { get; set; }
    public List<ListFilterOption> Filters { get; set; }
}

public class ListFilterOption
{
    public string Field { get; set; }
    public string Operator { get; set; }
    public string Value { get; set; }
}

public class ListSortOption
{
    public string Field { get; set; }
    public string Dir { get; set; }
}

在本地文件中,您可以使用ansible sintax编写一个变量,如

- template: src=/mytemplates/foo.j2 dest=/etc/file.conf

如果它在脚本范围内,它将被替换。 Here文档。