community.windows.win_lineinfile 模块 – 确保文件中存在特定行,或使用反向引用的正则表达式替换现有行

注意

此模块是 community.windows 集合(版本 2.3.0)的一部分。

如果您正在使用 ansible 包,您可能已经安装了此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.windows

要在 playbook 中使用它,请指定:community.windows.win_lineinfile

概要

  • 此模块将搜索文件中的某一行,并确保该行存在或不存在。

  • 当您只想更改文件中的单行时,这主要很有用。

参数

参数

注释

backrefs

布尔值

state=present 一起使用。如果设置,line 可以包含反向引用(位置的和命名的),如果 regexp 匹配,这些反向引用将被填充。此标志会稍微更改模块的操作;insertbeforeinsertafter 将被忽略,如果 regexp 在文件中任何位置都不匹配,则文件将保持不变。

如果 regexp 确实匹配,则最后一个匹配的行将被展开的 line 参数替换。

选项

  • false ←(默认)

  • true

backup

布尔值

确定是否应创建备份。

当设置为 yes 时,创建包含时间戳信息的备份文件,以便您可以在错误地覆盖文件时恢复原始文件。

选项

  • false ←(默认)

  • true

create

布尔值

state=present 一起使用。如果指定,则如果该文件尚不存在,则将创建该文件。默认情况下,如果文件丢失,它将失败。

选项

  • false ←(默认)

  • true

encoding

字符串

指定要操作的源文本文件的编码(因此也是输出编码)。auto 的默认值将导致模块自动检测源文件的编码,并确保修改后的文件使用相同的编码写入。

可以将显式编码作为字符串传递,该字符串是传递给 .NET 框架 System.Text.Encoding.GetEncoding() 方法的有效值 - 请参阅 https://msdn.microsoft.com/en-us/library/system.text.encoding%28v=vs.110%29.aspx

如果您想使用特定编码创建新文件,则这主要与 create=yes 一起使用。如果指定了 create=yes 而没有特定的编码,则将使用默认编码(UTF-8,无 BOM)。

默认值:"auto"

insertafter

字符串

state=present 一起使用。如果指定,则该行将插入到指定正则表达式的最后一个匹配项之后。可以使用特殊值;EOF 用于将该行插入到文件末尾。

如果指定的正则表达式没有匹配项,则将改为使用 EOF。不能与 backrefs 一起使用。

选项

  • "EOF" ←(默认)

  • "*regex*"

insertbefore

字符串

state=present 一起使用。如果指定,则该行将插入到指定正则表达式的最后一个匹配项之前。可以使用一个值;BOF 用于将该行插入到文件开头。

如果指定的正则表达式没有匹配项,则该行将插入到文件末尾。不能与 backrefs 一起使用。

选项

  • "BOF"

  • "*regex*"

line

字符串

state=present 所必需。要插入/替换到文件中的行。如果设置了 backrefs,则可能包含反向引用,如果 regexp 匹配,这些反向引用将使用 regexp 捕获组展开。

请注意,该行首先在控制器上处理,因此取决于 yaml 引号规则。任何双引号行都会展开控制字符,例如 ‘\r\n’。要按字面意思打印此类字符,请使用单引号或不使用引号。

newline

字符串

指定用于修改文件的行分隔符样式。默认为 Windows 行分隔符 (\r\n)。请注意,无论输入文件中原始的行分隔符是什么,都将使用指定的行分隔符进行文件输出。

选项

  • "unix"

  • "windows" ← (默认)

path

别名: dest, destfile, name

路径 / 必需

要修改的文件的路径。

请注意,当行使用双引号时,Windows 路径分隔符 \ 必须转义为 \\

regex

别名: regexp

字符串

要在文件的每一行中查找的正则表达式。对于 state=present,如果找到,则替换该模式;仅替换最后找到的行。对于 state=absent,要删除的行的模式。使用 .NET 兼容的正则表达式;请参阅 https://msdn.microsoft.com/en-us/library/hs600312%28v=vs.110%29.aspx

state

字符串

该行是否应该存在。

选项

  • "absent"

  • "present" ← (默认)

validate

字符串

在复制到位之前要运行的验证。在命令中使用 %s 来指示要验证的当前文件。

该命令是安全传递的,因此 shell 功能(如扩展和管道)将不起作用。

参见

参见

ansible.builtin.assemble

从片段组装配置文件。

ansible.builtin.lineinfile

管理文本文件中的行。

示例

- name: Insert path without converting \r\n
  community.windows.win_lineinfile:
    path: c:\file.txt
    line: c:\return\new

- community.windows.win_lineinfile:
    path: C:\Temp\example.conf
    regex: '^name='
    line: 'name=JohnDoe'

- community.windows.win_lineinfile:
    path: C:\Temp\example.conf
    regex: '^name='
    state: absent

- community.windows.win_lineinfile:
    path: C:\Temp\example.conf
    regex: '^127\.0\.0\.1'
    line: '127.0.0.1 localhost'

- community.windows.win_lineinfile:
    path: C:\Temp\httpd.conf
    regex: '^Listen '
    insertafter: '^#Listen '
    line: Listen 8080

- community.windows.win_lineinfile:
    path: C:\Temp\services
    regex: '^# port for http'
    insertbefore: '^www.*80/tcp'
    line: '# port for http by default'

- name: Create file if it doesn't exist with a specific encoding
  community.windows.win_lineinfile:
    path: C:\Temp\utf16.txt
    create: true
    encoding: utf-16
    line: This is a utf-16 encoded file

- name: Add a line to a file and ensure the resulting file uses unix line separators
  community.windows.win_lineinfile:
    path: C:\Temp\testfile.txt
    line: Line added to file
    newline: unix

- name: Update a line using backrefs
  community.windows.win_lineinfile:
    path: C:\Temp\example.conf
    backrefs: true
    regex: '(^name=)'
    line: '$1JohnDoe'

返回值

常见返回值在此处记录 这里,以下是此模块独有的字段

Key

描述

backup

字符串

创建的备份文件的名称。

现在已弃用,请改用 backup_file

返回: 如果 backup=yes

示例: "C:\\Path\\To\\File.txt.11540.20150212-220915.bak"

backup_file

字符串

创建的备份文件的名称。

返回: 如果 backup=yes

示例: "C:\\Path\\To\\File.txt.11540.20150212-220915.bak"

作者

  • Brian Lloyd (@brianlloyd)