1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ansible]特殊文字をエスケープ処理する方法

Last updated at Posted at 2020-09-27

Ansibleを利用していると、replace,lineinfileなどでエスケープ処理をするタイミングがあると思います。その時に便利な方法です。

やりたいこと

以下の様なシェルスクリプトを以下のようにAnsibleで置換処理をしたい。

## /tmp/test.sh
#!/bin/bash

FILE="/tmp/hoge.txt"
# → FILE="/tmp/fuga.txt"

[ -e ${FILE} ] && echo "OK"
# → [ -s ${FILE} ] && echo "OK"

Ansibleタスクの記述

regexpに{{ item名 | regex_escape() }}のように記載をすると、特殊文字をエスケープ処理してくれます。
regexpの記述は特に気にせず、置き換えを実施したい文字列をそのまま記述すればよいので、便利です。エスケープし忘れなどのミスも防止出来るので、積極的に使っていきたいですね。

---
- name: test
  replace:
    dest: /tmp/test.sh
    regexp:  '{{ item.regexp | regex_escape() }}'
    replace: '{{ item.replace }}'
  with_items:
    - regexp:  'FILE="/tmp/hoge.txt"'
      replace: 'FILE="/tmp/fuga.txt"'
    - regexp:  '[ -s ${FILE} ] && echo "OK"'
      replace: '[ -e ${FILE} ] && echo "OK"'

結果

きれいに置換出来ました。

## /tmp/test.sh 
#!/bin/bash

FILE="/tmp/hoge.txt"

[ -s ${FILE} ] && echo "OK"

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?