9

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.

  • 1
    sed -i 's/^# autologin=.*/autologin=ubuntu/' /some/file? – muru Oct 15 '16 at 8:48
21

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
| improve this answer | |
  • the filename is /etc/lxdm/default.conf - so the full command should be like this? = sed -i 's/# autologin=dgod/autologin=ubuntu/' /etc/lxdm/default.conf – lewis4u Oct 15 '16 at 8:51
  • yes, exactly like that @lewis4u – Zanna Oct 15 '16 at 8:52
0

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

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.