🖥

Ansible 2.6 — replace モジュールを使って置換する

2023/08/26に公開

replace module を使うことでファイル内の文字列を置換できる。

パラメータ

基本

パラメータ 説明
path リモートマシン上のファイルパス
regexp マッチさせる正規表現
https://docs.python.org/2/library/re.html

行頭マッチ ^ と行末マッチ $を使うことで1行ごとの置換ができる
replace 置換後の文字列
指定なしの場合はマッチした文字列を削除する

応用

パラメータ 説明
backup yes を指定した場合は置換前のバックアップが取られる
例: people_source.txt.772.2018-08-01@12:00:28~
unsafe_writes デフォルトではnoでアトミックに置換処理をおこなうが、yesにして非アトミックな処理に変えることも出来る
(モジュールドキュメントではdockerでのマウントファイルの場合が挙げられている)
encoding ファイルを読み書きするエンコード
デフォルトは utf-8

Playbookの例

- hosts:
    - localhost

  tasks:
    - name: copy
      copy:
        src: people_source.txt
        dest: people_replaced.txt

    # Replace "Alice" to "Alice is lady" in all line
    - name: replace
      replace:
        path: people_replaced.txt
        regexp: '^Alice$'
        replace: Alice is a lady

    # Replace "Bob (Lastname)" to "Bob (Lastname) is gentleman" in all line
    - name: replace
      replace:
        path: people_replaced.txt
        # () is capture of regular expression
        regexp: '^Bob ([a-zA-Z]+)$'
        # \1 is replaced by first captured strings
        replace: 'Bob \1 is a gentleman'

    - name: check replaced file
      slurp:
        src: people_replaced.txt
      register: replaced_file

    - name: check replaced file body
      debug:
        msg: "{{ replaced_file.content | b64decode }}"

元ファイル

Alice
Bob Marley
Carol
Alice
Bob Wills
Carol
Alice
Bob Horper
Carol

置換後のファイル

Alice is a lady
Bob Marley is a gentleman
Carol
Alice is a lady
Bob Wills is a gentleman
Carol
Alice is a lady
Bob Horper is a gentleman
Carol

実行例


PLAY [localhost] **************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************
ok: [localhost]

TASK [copy] *******************************************************************************************************************************
changed: [localhost]

TASK [replace] ****************************************************************************************************************************
changed: [localhost]

TASK [replace] ****************************************************************************************************************************
changed: [localhost]

TASK [check replaced file] ****************************************************************************************************************
ok: [localhost]

TASK [check replaced file body] ***********************************************************************************************************
ok: [localhost] => {
    "msg": "Alice is a lady\nBob Marley is a gentleman\nCarol\nAlice is a lady\nBob Wills is a gentleman\nCarol\nAlice is a lady\nBob Horper is a gentleman\nCarol\n"
}

PLAY RECAP ********************************************************************************************************************************
localhost                  : ok=6    changed=3    unreachable=0    failed=0   

Gist

参考

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2018-08-02

Discussion