

タイトルの通りですが、ymlを実行した際に取得したデータの[ ]で囲まれた部分のデータを取得したいと考えております。  
現状は以下のymlで取得できていますが、①、②の部分を正規表現を使用して1つの処理で取得できないか試行錯誤しています。

[code]

    ---
    ---
    - name: example
      hosts: all
      gather_facts: no
      tasks:
    
      - name: sumplemod
        block:
        - name: getdata
          commands:
          #データ取得処理
          register: data1
    
        - name: Set Fact String
          set_fact:
            data2: "{{ (data1.stdout | string) }}"
          #data2は 123aaa 123bbb ccc xxx [123-ddd 123-eee] fff ggg というデータ構造です
    
        - name: Set Fact data2 Split …①
          set_fact:
            data3: "{{ data2.split('xxx') }}"
    
        - name: Set Fact data3 Space …②
          set_fact:
            data4: "{{ data3[1].split(' ') }}"
    
        - name: Set Fact data4 count
          set_fact:
            data5: "{{ data4 | select('match', '.123*' ) | list | count }}"
    
[/code]

ymlの流れとしては以下の通りです。

  * データ取得処理で取得した標準出力をstringに変換
  * stringに変換した後、「xxx」で分割
  * 「xxx」で分割した後さらに「 」(半角スペース)で分割
  * 「123-」という共通部分の数をカウントする

[Ansible Jinja2 filters
正規表現で変数の文字列を置換、抽出する](https://qiita.com/tbuchi888/items/80fded8d11366e967290)

を参考に、ひとまずかっこも含めて取得しようとしてい以下のように記述していますが、エラーが出ます。

[code]

      data3: "{{ data2 | regex_replace('\\[.+\\]' ,'\\1')}}"
    
    An exception occurred during task execution. To see the full traceback, use -vvv. The error was: error: invalid group reference
    fatal: [192.168.10.1]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""}
    
[/code]

解決策やヒントなどございましたら教えていただけると助かります。

2021/06/02追記

現状は、

[code]

    regex_replace('(\\[.+\\])' ,'\\1')
    
[/code]

でエラーは発生しなくなりましたが、[ ]も含めての値抽出ができていない状態です。  
※data1の内容がそのまま出力されてしまいます。  
おそらく正規表現の指定の方法が誤っていると思うのですが、何が誤っているのかわからない状態です。  
この辺についても何かヒントなどあればご教示ください。


CC BY-SA 4.0
2021-06-01T10:55:27.383
76256
2021-06-02T05:32:52.433
2021-06-02T05:32:52.433
45597
45597
question
正規表現 ansible
Ansibleで正規表現を使用して文字列を抽出したい