Sed replace specific line in file

75,939

Solution 1

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

Solution 2

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

Share:
75,939

Related videos on Youtube

lewis4u
Author by

lewis4u

Updated on September 18, 2022

Comments

  • lewis4u
    lewis4u over 1 year

    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.

    • Admin
      Admin over 7 years
      sed -i 's/^# autologin=.*/autologin=ubuntu/' /some/file?
  • lewis4u
    lewis4u over 7 years
    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
  • Zanna
    Zanna over 7 years
    yes, exactly like that @lewis4u
  • Tjorriemorrie
    Tjorriemorrie over 2 years
    No /g at the end?
  • Zanna
    Zanna over 2 years
    @Tjorriemorrie g means apply the command to every occurrence on the line specified, which is not relevant to this case
  • Gulzar
    Gulzar over 2 years
    sed 's/# 1/1' /etc/gai.conf gives sed: -e expression #1, char 7: unterminated `s' command
  • Zanna
    Zanna over 2 years
    @Gulzar yes, you need a final / before your closing quote, i.e. sed 's/# 1/1/' /etc/gai.conf