Can Linux do conditional judgment to insert the content at a certain line in Linux?

For example, I would like to add user "test" to /etc/sudoers to let it can switch to root:

  1 #
  2 # This file MUST be edited with the 'visudo' command as root.
  3 #
  4 # Please consider adding local content in /etc/sudoers.d/ instead of
  5 # directly modifying this file.
  6 #
  7 # See the man page for details on how to write a sudoers file.
  8 #
  9 Defaults        env_reset
 10 Defaults        mail_badpass
 11 Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
 13 # Host alias specification
 15 # User alias specification
 17 # Cmnd alias specification
 19 # User privilege specification
 20 root    ALL=(ALL:ALL) ALL
 22 # Members of the admin group may gain root privileges
 23 %admin ALL=(ALL) ALL
 25 # Allow members of group sudo to execute any command
 26 %sudo   ALL=(ALL:ALL) ALL
 28 # See sudoers(5) for more information on "#include" directives:
 30 #includedir /etc/sudoers.d

I want my command to find row 20( if root ALL=(ALL:ALL) ALL ) then add the below content in row 21

test    ALL=(ALL:ALL) ALL

Can the Linux command do that or I can only do that by coding such as Perl or Python?

I am very new to Linux, any help is appreciated!

1 Answer 1


It doesn't matter where you add the line, sudo doesn't care about the order.

Just append it to the end:

echo 'test    ALL=(ALL:ALL) ALL' | sudo tee -a /etc/sudoers

Or, even better, use the include dir for it:

echo 'test    ALL=(ALL:ALL) ALL' | sudo tee /etc/sudoers.d/test

This way you don't have to manually update the sudoers file when it changes during package updates.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .