Ansible: Comment Out & Uncomment Lines in a File

To comment out or uncomment lines in a file in automated deployments we can use the Ansible’s replace module.

This module is used to replace all instances of a pattern within a file and perfectly suits our needs.

In this note i will show several examples of the Ansible tasks for commenting out and uncommenting lines in a file.

Cool Tip: How to check if a file exists in Ansible! Read more →

Comment Out & Uncomment Lines using Ansible

To comment out or uncomment all the lines in a file matching the particular string:

- name: "Comment out the line"
  replace:
    path: /path/to/file
    regexp: 'Comment me out'
    replace: '#Comment me out'

- name: "Uncomment the line"
  replace:
    path: /path/to/file
    regexp: '#Uncomment me'
    replace: 'Uncomment me'

Often the exact content of a string to comment out or uncomment is unknown.

Imagine a config file with some foo option that you need to disable or enable without knowing the current value of this option.

In Ansible this can be achieved by using the \1 in replace to match (…every character inside brackets…) in regexp.

To comment out lines starting with any number of the whitespace characters and with any characters after the foo=:

- name: "Comment out the line"
  replace:
    path: /path/to/file
    regexp: '^\s*(foo=.*)'
    replace: '#\1'

This Ansible task results to the changes as follows:

# Before commenting out
---
foo=bar
 foo=baz
     foo=qux

# After commenting out
---
#foo=bar
#foo=baz
#foo=qux

To uncomment lines starting with any number of the whitespace characters, followed by any number of the # (pound) signs, followed again by any number of the whitespace characters and with any characters after the foo=:

- name: "Uncomment the line"
  replace:
    path: /path/to/file
    regexp: '^\s*#*\s*(foo=.*)'
    replace: '\1'

This Ansible task results the changes as follows:

# Before uncommenting
---
#foo=bar
   #   foo=baz
  #### foo=qux

# After uncommenting
---
foo=bar
foo=baz
foo=qux

Leave a Reply