如何使用ansible删除文件中另一行之后的行?

时间:2017-06-25 02:50:19

标签: ansible file-processing

我的ansible清单包含一个动态生成IP地址的组。

[asg]
10.15.100.13
10.15.100.14

是否可以在[asg]之后删除该行? (即10.15.100.13

此组中的IP地址是指自动缩放组中的ec2个实例。

lineinfile模块没有removeafter选项。

我想知道在[asg]之后是否有其他替代方法可以删除该行。

regexp选项无效。因为IP地址经常变化。

2 个答案:

答案 0 :(得分:1)

只要支持regexp,replace就完全可以。

- replace:
    path: /path/to/file
    regexp: '\[asg\]\n[^\n]+' # Matches [asg] and next line
    replace: '[asg]'          # Replace both lines with [asg]

答案 1 :(得分:0)

我不确定是否可以使用lineinfileblockinfile,但您可以使用sed来实现它。 警告:此解决方案不是幂等

- shell: /bin/sed -i.bak '/\[asg\]/{n;d}' my_inventory_file

该命令将删除[asg]之后的行。它会自动创建一个.bak扩展名的备份文件。根据您的操作系统,sed的路径和参数可能会有所不同。您可以进一步优化regexp

- shell: sed -i.bak '/^\s*\[asg\]\s*$/{n;d}' my_inventory_file

{n;d}{n;d;} for MacOS - 读取行(n)ext为pattern和(d)elete it