You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible按行读取文件并按条件删除行的实现问题

Ansible实现按行过滤文件(保留年份≥2023的行)

需求说明

需要用Ansible完成以下操作:

  • 按行读取目标文件
  • 检查每行末尾的年份字段,删除年份<2023的行,保留年份≥2023的行

示例输入文件

abcd Sat Oct 25 04:30:35 EDT 2036
defg Tue Dec 01 18:59:59 EST 2037
ghij Fri Jun 17 06:15:06 EDT 2022

预期输出文件

abcd Sat Oct 25 04:30:35 EDT 2036
defg Tue Dec 01 18:59:59 EST 2037

原代码问题分析

  1. 语法错误:lookup的文件路径未加引号,导致Ansible解析失败;debug模块的写法不符合语法规范
  2. 逻辑缺陷:仅取最后一行的年份,没有实现逐行遍历判断,无法完成批量过滤需求

正确实现方案

方案一:正则筛选(简洁高效)

通过正则匹配直接筛选符合条件的行,适合格式固定的场景:

- name: 过滤文件中年份小于2023的行
  hosts: localhost
  vars:
    file_path: "/home/user/cert_cleanup/{{ output_file }}"
  tasks:
    - name: 读取文件并筛选符合条件的行
      set_fact:
        filtered_lines: "{{ lookup('file', file_path).split('\n') | select('match', '.*\\s20(2[3-9]|[3-9]\\d)$') | list }}"
      when: lookup('file', file_path) != ''

    - name: 将过滤结果写入原文件
      copy:
        content: "{{ filtered_lines | join('\n') }}\n"
        dest: "{{ file_path }}"

代码说明

  • lookup('file', file_path):读取目标文件的全部内容
  • split('\n'):将文件内容拆分为每行的列表
  • select('match', '.*\\s20(2[3-9]|[3-9]\\d)$'):用正则匹配行末为2023及以后年份的行
  • join('\n'):将筛选后的行重新拼接为字符串,末尾加换行保证文件格式正常

方案二:逐行判断(逻辑清晰)

如果需要更直观的逐行判断逻辑,可采用遍历方式:

- name: 逐行过滤文件内容
  hosts: localhost
  vars:
    file_path: "/home/user/cert_cleanup/{{ output_file }}"
  tasks:
    - name: 读取文件所有行
      set_fact:
        all_lines: "{{ lookup('file', file_path).split('\n') }}"
      when: lookup('file', file_path) != ''

    - name: 筛选年份≥2023的行
      set_fact:
        filtered_lines: "{{ filtered_lines | default([]) + [item] }}"
      loop: "{{ all_lines }}"
      when:
        - item | trim != ''  # 跳过空行
        - item.split()[-1] | int >= 2023  # 提取行末年份转为整数后判断

    - name: 写入过滤后的内容
      copy:
        content: "{{ filtered_lines | join('\n') }}\n"
        dest: "{{ file_path }}"

代码说明

  • loop: "{{ all_lines }}":遍历文件的每一行
  • item.split()[-1]:按空格拆分每行内容,取最后一个字段(即年份)
  • | int >= 2023:将年份转为整数后判断是否符合条件
  • filtered_lines | default([]) + [item]:收集所有符合条件的行

内容的提问来源于stack exchange,提问作者Evangeline Amalina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:25:35