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

如何用Shell或Ansible从文本文件提取PID并转为指定YAML格式

用Shell/Ansible提取PID并生成指定YAML格式

Shell 实现方案

直接通过jq、grep和awk组合命令,从目标文件中提取PID并生成要求的YAML格式:

jq -r '.[]' /tmp/log.txt | grep "pid:" | awk '{print "pid: " $3}'

命令说明

  • jq -r '.[]' /tmp/log.txt:将日志文件中的JSON数组元素逐行输出
  • grep "pid:":过滤出包含PID信息的行
  • awk '{print "pid: " $3}':提取每行中的PID数值,并格式化为pid: [数值]的形式

如果需要将结果写入文件,追加重定向即可:

jq -r '.[]' /tmp/log.txt | grep "pid:" | awk '{print "pid: " $3}' > /tmp/pids.yaml

Ansible 实现方案

编写Ansible Playbook,通过内置模块和过滤器完成提取与格式转换:

- name: 提取PID并生成YAML格式文件
  hosts: localhost
  tasks:
    # 读取目标日志文件
    - name: 读取/tmp/log.txt内容
      slurp:
        src: /tmp/log.txt
      register: log_data

    # 解析日志并提取格式化后的PID行
    - name: 处理PID信息
      set_fact:
        formatted_pids: >-
          {{
            (log_data.content | b64decode | from_json)
            | select('search', 'pid:')
            | map('regex_replace', '.*pid: (\\d+).*', 'pid: \\1')
            | list
          }}

    # 打印结果(可选)
    - name: 输出PID结果
      debug:
        msg: "{{ formatted_pids }}"

    # 将结果写入YAML文件(可选)
    - name: 写入结果到文件
      copy:
        content: "{{ formatted_pids | join('\n') }}\n"
        dest: /tmp/pids.yaml

步骤说明

  1. slurp模块读取日志文件内容,以base64编码形式存储在变量中
  2. 通过b64decode解码内容,from_json将字符串转为JSON数组
  3. select('search', 'pid:')过滤出包含PID的数组元素
  4. regex_replace提取PID数值并格式化为要求的YAML行
  5. 可选:通过debug模块输出结果,或用copy模块写入文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:07:06