40

I'm building a bash script for my virtual machine and I would like to know how to replace a specific line in this document:

[base]

## uncomment and set autologin username to enable autologin
# autologin=dgod

## uncomment and set timeout to enable timeout autologin,

## the value should >=5

# timeout=10

## default session or desktop used when no systemwide config

# session=/usr/bin/startlxde

this line:

# autologin=dgod

I want to change to this

autologin=ubuntu

I have tried with "tee" and "sed" but couldn't make it work. This should be very easy for someone who works with bash scripts more often than me.

Zanna
  • 69,223
  • 56
  • 216
  • 327
lewis4u
  • 4,744
  • 10
  • 37
  • 48

2 Answers2

54

It is straightforward. Use the s command in sed to search and replace.

sed 's/# autologin=dgod/autologin=ubuntu/' /path/to/file

If you see what you want, add -i to change the file in place

sed -i 's/# autologin=dgod/autologin=ubuntu/' /path/to/file
Zanna
  • 69,223
  • 56
  • 216
  • 327
5

I've found the most effective way to do this is actually to use the change syntax to set the exact value you want unless you are explicitly trying to enable a two way toggle. You can use this to change as well as uncomment a line no matter how it is commented, with # or // or <!--.

sed 's%searchTerm=% c searchTerm=desiredValue%' targetFile.txt

dragon788
  • 1,516
  • 17
  • 20