Ansible Documentation
replace – Replace all instances of a particular string in a file using a back-referenced regular expression.機能
- ファイル内のすべての特定の文字列を別の文字列に置き換えます
- 置き換え対象の文字列の指定には正規表現が使用できます
パラメータ
| パラメータ | 選択肢/ Default | 説明 |
|---|---|---|
| after | - | 指定した文字列と一致した位置よりも以降を対象にする。文字列の指定に文字列の指定に正規表現を使用できる。before: と併用し、ファイル内の対象範囲を指定できる |
| backup | ・no ・yes | yes を指定するとタイムスタンプ情報を含んだファイル名で path: で指定したファイルをバックアップする |
| before | - | 指定した文字列と一致した位置よりも以前を対象にする。文字列の指定に文字列の指定に正規表現を使用できる。after: と併用し、ファイル内の対象範囲を指定できる |
| path ※必須※ | - | 変更対象のファイル |
| regexp ※必須※ | - | 置換対象の文字列。文字列の指定に正規表現を使用できる |
| replace | - | 置換後の文字列 |
| validate | - | 変更内容をファイルに保存する前に内容を検証するコマンド。ファイル名は引数 %s に設定されてコマンドに渡される |
例
■ 置き換え対象のファイル testfile の内容mae.1 item mae #1
naka.1 item naka #1
ato.1 item ato #1
mae.2 item mae #2
naka.2 item naka #2
ato.2 item.ato #2
mae.3 item mae #3
naka.3 item naka #3
ato.3 item.ato #3
■ 文字列の簡単な置き換え
- name: testfile 内のすべての文字列 mae を before に置き換える
replace:
path: ~/testfile
regexp: 'mae'
replace: 'before'
実行結果
mae.1 item mae #1
before.1 item before #1
naka.1 item naka #1
ato.1 item ato #1
before.2 item before #2
naka.2 item naka #2
ato.2 item.ato #2
before.3 item before #3
naka.3 item naka #3
ato.3 item.ato #3
■ 範囲指定ありの置き換え
- name: testfile 内のすべての文字列 mae を before に置き換える(範囲指定あり)
replace:
path: ~/testfile
regexp: 'mae'
replace: 'before'
after: 'ato.1'
before: 'mae #3'
実行結果
mae.1 item mae #1
naka.1 item naka #1
ato.1 item ato #1
before.2 item before #2
naka.2 item naka #2
ato.2 item.ato #2
before.3 item mae #3
naka.3 item naka #3
ato.3 item.ato #3
■ 対象ファイルのバックアップを取る
- name: 置換前に対象ファイルのバックアップを取る
replace:
path: ~/testfile
regexp: 'ato'
replace: 'after'
backup: yes
実行結果
[workman@node-c0706 ~]$ ls -l
total 8
-rw-r--r--. 1 workman staff 168 May 1 21:00 testfile
-rw-r--r--. 1 workman staff 156 May 1 20:54 testfile.11818.2019-05-01@21:00:55~ ← バックアップファイル
[workman@node-c0706 ~]$
■ 正規表現 #1
- name: testfile 内の文字列で先頭の mae を before に置き換える
replace:
path: ~/testfile
regexp: '^mae'
replace: 'before'
実行結果
before.1 item mae #1
naka.1 item naka #1
ato.1 item ato #1
before.2 item mae #2
naka.2 item naka #2
ato.2 item.ato #2
before.3 item mae #3
naka.3 item naka #3
ato.3 item.ato #3
■ 正規表現 #2
- name: mae, naka, ato の後ろの番号を削除する
replace:
path: ~/testfile
regexp: '#[1-3]$'
実行結果
mae.1 item mae
naka.1 item naka
ato.1 item ato
mae.2 item mae
naka.2 item naka
ato.2 item.ato
mae.3 item mae
naka.3 item naka
ato.3 item.ato