lineinfile モジュール

2019/05/03

Ansible

 Ansible Documentation

lineinfile – Manage lines in text files

 機能

  • 対象ファイル内の特定の行の内容を別の内容に置き換えます
  • 対象ファイル内の特定の行の前または後に行を挿入します
  • 対象ファイル内の特定の行を削除します

 パラメータ

パラメータ選択肢/
Default
説明
backupno
・yes
yes を指定するとタイムスタンプ情報を含んだファイル名で path: で指定したファイルをバックアップする
path
※必須※
-対象のファイル
regexp-検索対象の文字列。文字列の指定に正規表現を使用できる
state・absent
present
・absent
regexp: で指定した文字列を含むすべての行を削除する
・present
「state: present と併用するパラメータ」を参照
validate-変更内容をファイルに保存する前に内容を検証するコマンド。ファイル名は引数 %s に設定されてコマンドに渡される
state: present と併用するパラメータ
パラメータ選択肢/
Default
説明
createno
・yes
path: で指定したファイルが存在しないときの動作を指定
・no
動作は失敗する
・yes
動作は失敗せず path: で指定したファイルを作成する
firstmatchno
・yes
insertafter: または insertbefore: と併用し、yes を指定すると 最初に一致する行を処理対象にする
insertafterEOF
・∗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

カテゴリー

目次

QooQ