gpt4 book ai didi

ansible - 使用 lineinfile 插入行但未按预期工作

转载 作者:行者123 更新时间:2023-12-04 09:11:19 26 4
gpt4 key购买 nike

我正在使用 lineinfile在 syslog 文件中插入一行。这是我的系统日志:

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
我要加 compressdelaycompress之后 missingok .这是我的代码:
- name: "Adding compress line in /etc/logrotate.d/syslog"
lineinfile:
path: /etc/logrotate.d/syslog
insertafter: "^missingok"
line: " compress"
firstmatch: yes
state: present

- name: "Adding delaycompress line in /etc/logrotate.d/syslog"
lineinfile:
path: /etc/logrotate.d/syslog
insertbefore: "^sharedscripts"
line: " delaycompress"
firstmatch: yes
state: present
但是它在文件的末尾(最后几行)添加了两者。
备注 : 我在 compress 前加了 4 个空格和 delaycompress .

最佳答案

这是因为插入符号 ^ , 在正则表达式中,匹配字符串的开头而不消耗任何字符。
并且因为您在 missingok 之前确实有空格和 sharedscripts ,您的 insertafterinsertbefore正则表达式 are matching nothing .
要解决此问题,您可以在 \s 的帮助下仅在行首允许空格和空格。匹配任何空格、制表符或换行符和星号 *匹配零个或多个连续字符。
所以正确的正则表达式是


  • ^\s*missingok
    Test it here

  • ^\s*sharedscripts

  • 您的任务的修复将是:
    - name: "Adding compress line in /etc/logrotate.d/syslog"
    lineinfile:
    path: /etc/logrotate.d/syslog
    insertafter: "^\\s*missingok"
    line: " compress"
    firstmatch: yes
    state: present

    - name: "Adding delaycompress line in /etc/logrotate.d/syslog"
    lineinfile:
    path: /etc/logrotate.d/syslog
    insertbefore: "^\\s*sharedscripts"
    line: " delaycompress"
    firstmatch: yes
    state: present
    请注意,因为 Ansible 是一个 Python 应用程序, backslashes \ have a special meaning and have to be escaped .

    关于ansible - 使用 lineinfile 插入行但未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63347659/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com