Ansible Documentation
lineinfile – Manage lines in text files機能
- 対象ファイル内の特定の行の内容を別の内容に置き換えます
- 対象ファイル内の特定の行の前または後に行を挿入します
- 対象ファイル内の特定の行を削除します
パラメータ
パラメータ | 選択肢/ Default | 説明 |
---|---|---|
backup | ・no ・yes | yes を指定するとタイムスタンプ情報を含んだファイル名で path: で指定したファイルをバックアップする |
path ※必須※ | - | 対象のファイル |
regexp | - | 検索対象の文字列。文字列の指定に正規表現を使用できる |
state | ・absent ・present | ・absent regexp: で指定した文字列を含むすべての行を削除する ・present 「state: present と併用するパラメータ」を参照 |
validate | - | 変更内容をファイルに保存する前に内容を検証するコマンド。ファイル名は引数 %s に設定されてコマンドに渡される |
パラメータ | 選択肢/ Default | 説明 |
---|---|---|
create | ・no ・yes | path: で指定したファイルが存在しないときの動作を指定 ・no 動作は失敗する ・yes 動作は失敗せず path: で指定したファイルを作成する |
firstmatch | ・no ・yes | insertafter: または insertbefore: と併用し、yes を指定すると 最初に一致する行を処理対象にする |
insertafter | ・EOF ・∗regex∗ | 指定した文字列が最後に一致する行の後に line: で指定した文字列を行として挿入する。指定した文字列と一致する行が存在しない場合、line: で指定した行はファイルの末尾に追加される。文字列の指定に正規表現を使用できる |
insertbefore | ・BOF ・∗regex∗ | 指定した文字列が最後に一致する行の前に line: で指定した文字列を行として挿入する。指定した文字列と一致する行が存在しない場合、line: で指定した行はファイルの末尾に追加される。文字列の指定に正規表現を使用できる |
line | - | 挿入または置換後の行を指定 |
state | ・absent ・present | ・absent: 上述参照 ・present regexp: で指定した文字列を含む行を line: で指定した文字列に置き換える。insertbefore: / insertafter、firstmatch が指定されている場合、その動作に従って line: に指定した文字列を行として追加する |
例
元データ[workman@node-c0706 ~]$ cat testfile
aa
bb
aaaa
bbbb
aaaaaa
bbbbbb
aaaaaaaa
bbbbbbbb
aaaaaaaaaa
bbbbbbbbbb
[workman@node-c0706 ~]$
- name: 文字列 aaa を含む行を ccc に置き換える lineinfile: path: ~/testfile regexp: 'aaa' line: 'ccc'実行結果
regexp: で指定した文字列を含む最後の行が line: で指定した内容に置き換わった
aa
bb
aaaa
bbbb
aaaaaa
bbbbbb
aaaaaaaa
bbbbbbbb
ccc
bbbbbbbbbb
- name: 文字列 ddd を含む行を ccc に置き換える lineinfile: path: ~/testfile regexp: 'ddd' line: 'ccc'実行結果
regexp: に指定した文字列を含む行がないため line: で指定した内容が末尾に追加された
aa
bb
aaaa
bbbb
aaaaaa
bbbbbb
aaaaaaaa
bbbbbbbb
aaaaaaaaaa
bbbbbbbbbb
ccc
- name: 文字列 aaaaaa で始まる行の次に ccc を挿入する lineinfile: path: ~/testfile insertafter: '^aaaaaa' line: 'ccc'実行結果
regexp: に指定した文字列で始まる最後の行の次に line: で指定した内容が挿入された
aa
bb
aaaa
bbbb
aaaaaa
bbbbbb
aaaaaaaa
bbbbbbbb
aaaaaaaaaa
ccc
bbbbbbbbbb
- name: 文字列 aaaaaa で始まる行の次に ccc を挿入する lineinfile: path: ~/testfile insertafter: '^aaaaaa' firstmatch: yes line: 'ccc'実行結果
regexp: に指定した文字列で始まる最初の行の次に line: で指定した内容が挿入された
aa
bb
aaaa
bbbb
aaaaaa
ccc
bbbbbb
aaaaaaaa
bbbbbbbb
aaaaaaaaaa
bbbbbbbbbb
- name: 文字列 dddddd で始まる行の次に ccc を挿入する lineinfile: path: ~/testfile insertafter: '^dddddd' line: 'ccc'実行結果
regexp: に指定した文字列を含む行がないため line: で指定した内容が末尾に追加された
aa
bb
aaaa
bbbb
aaaaaa
bbbbbb
aaaaaaaa
bbbbbbbb
aaaaaaaaaa
bbbbbbbbbb
ccc
- name: 文字列 aaaaaa で始まる行の前に ccc を挿入する lineinfile: path: ~/testfile insertbefore: '^aaaaaa' line: 'ccc'実行結果
regexp: に指定した文字列で始まる最後の行の前に line: で指定した内容が挿入された
aa
bb
aaaa
bbbb
aaaaaa
bbbbbb
aaaaaaaa
bbbbbbbb
ccc
aaaaaaaaaa
bbbbbbbbbb
- name: 文字列 aaaaaa で始まる行の前に ccc を挿入する lineinfile: path: ~/testfile insertbefore: '^aaaaaa' firstmatch: yes line: 'ccc'>実行結果
regexp: に指定した文字列で始まる最初の行の前に line: で指定した内容が挿入された
aa
bb
aaaa
bbbb
ccc
aaaaaa
bbbbbb
aaaaaaaa
bbbbbbbb
aaaaaaaaaa
bbbbbbbbbb
- name: 文字列 dddddd で始まる行の前に ccc を挿入する lineinfile: path: ~/testfile insertbefore: '^dddddd' line: 'ccc'実行結果
regexp: に指定した文字列を含む行がないため line: で指定した内容が末尾に追加された
aa
bb
aaaa
bbbb
aaaaaa
bbbbbb
aaaaaaaa
bbbbbbbb
aaaaaaaaaa
bbbbbbbbbb
ccc
- name: 元ファイルのバックアップを取ってから変更する lineinfile: path: ~/testfile regexp: 'aaa' line: 'ccc' backup: yes実行前
[workman@node-c0706 ~]$ ls -l
total 4
-rw-r--r--. 1 workman staff 63 May 3 12:16 testfile
[workman@node-c0706 ~]$
実行後タイムスタンプ情報を含んだバックアップファイルが作成された
[workman@node-c0706 ~]$ ls -l
total 8
-rw-r--r--. 1 workman staff 56 May 3 12:25 testfile
-rw-r--r--. 1 workman staff 63 May 3 12:16 testfile.7106.2019-05-03@12:25:14~
[workman@node-c0706 ~]$
- name: 指定したファイルが存在しないときは作成する lineinfile: path: ~/testfile regexp: 'aaa' line: 'ccc' create: yes実行前
[workman@node-c0706 ~]$ ls -l
total 0
[workman@node-c0706 ~]$
実行後
path: で指定したファイルが作成され、line: で指定した内容が登録された
[workman@node-c0706 ~]$ ls -l
total 4
-rw-r--r--. 1 workman staff 4 May 3 12:29 testfile
[workman@node-c0706 ~]$
[workman@node-c0706 ~]$ cat testfile
ccc
[workman@node-c0706 ~]$
- name: aaa で始まる行を削除する lineinfile: path: ~/testfile regexp: '^aaa' state: absent実行結果
aaa で始まるすべての行が削除された
aa
bb
bbbb
bbbbbb
bbbbbbbb
bbbbbbbbbb