微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不能使用grep解析的所有文件中的内容

如何解决不能使用grep解析的所有文件中的内容

我希望解析两个不同文件(例如file1.txt和file2.txt)中包含单词“ harddisk”的行。

使用下面的ansible命令

只能获取file2.txt中的内容。请告知。

---

- name: find file name with .txt extension
  shell: find /root -name "file*.txt" -print
  register: "files"

- debug:
    var: files

- name: find word harddisk in the file contents and output to result.txt in the destination server.
  shell:  cat "{{ item }}" |grep -i 'harddisk' > /root/test/result.txt
  with_items:
    - "{{ files.stdout_lines }}"
  args:
     executable: /bin/bash
  register: output

解决方法

给出文件列表

    my_files:
      - file1.txt
      - file2.txt

和内容

shell> cat file1.txt
foo
harddisk A
harddisk B
bar

shell> cat file2.txt
foo
harddisk C
harddisk D
bar

下面的任务grep文件中的行

    - shell: "cat {{ item }} | grep harddisk"
      register: files
      loop: "{{ my_files }}"

然后,下面的任务创建行列表

    - set_fact:
        my_list: "{{ files.results|
                     map(attribute='stdout_lines')|
                     list|flatten }}"
    - debug:
        var: my_list

给予

    "my_list": [
        "harddisk A","harddisk B","harddisk C","harddisk D"
    ]

要保留行的来源,下面的任务将创建一个包含数据的字典

    - set_fact:
        my_dict: "{{ dict(my_files|
                          zip(files.results|
                              map(attribute='stdout_lines')|
                              list)) }}"
    - debug:
        var: my_dict

给予

    "my_dict": {
        "file1.txt": [
            "harddisk A","harddisk B"
        ],"file2.txt": [
            "harddisk C","harddisk D"
        ]
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。