用 ansible 替换文件中的特定行

用 ansible 替换文件中的特定行

我知道如何使用 ansible 替换模块替​​换文件中的字符串。我正在寻找的是替换特定的行。

我有一个文件,在几个地方都有相同的字符串,我只想替换它的一个实例。

有没有办法只替换 X 实例或给它一个特定的行来替换?

答案1

有没有办法只替换 X 实例或给它一个特定的行来替换?

如果是我,我会使用shell模块和标准sed调用来更改特定行。在下面的示例中,我sed仅更改第四行。

---
- hosts: all 
  tasks:
    - name: "Run sed via ansible"
      shell: sed -i '4s/bike/car/' /home/maulinglawns/slask/sed_example

ansible playbook 之前的文件示例:

cat sed_example 
bike plane
bike plane
bike plane
bike plane
bike plane
bike plane
bike plane
bike plane
bike plane
bike plane

运行剧本:

ansible-playbook sed_with_ansible.yml -i "localhost," -k
SSH password: 

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [Run sed via ansible] *****************************************************
changed: [localhost]
 [WARNING]: Consider using template or lineinfile module rather than running
sed


PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0  

剧本后的文件:

cat sed_example 
bike plane
bike plane
bike plane
car plane
bike plane
bike plane
bike plane
bike plane
bike plane
bike plane

可能能够使用该lineinfile模块实现此目的,但我不知道有任何此类开关,并且在文档中找不到任何开关。

相关内容