在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'
?
答案 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文档。