Simplest way to comment/uncomment certain lines using command line
To comment lines 2 through 4 of bla.conf:
sed -i '2,4 s/^/#/' bla.conf
To make the command that you wanted, just put the above into a shell script called comment:
#!/bin/sh
sed -i "$1"' s/^/#/' "$2"
This script is used the same as yours with the exception that the first and last lines are to be separated by a comma rather than a dash. For example:
comment 2,4 bla.conf
An uncomment command can be created analogously.
Advanced feature
sed
's line selection is quite powerful. In addition to specifying first and last lines by number, it is also possible to specify them by a regex. So, if you want to command all lines from the one containing foo
to the one containing bar
, use:
comment '/foo/,/bar/' bla.conf
BSD (OSX) Systems
With BSD sed, the -i
option needs an argument even if it is just an empty string. Thus, for example, replace the top command above with:
sed -i '' '2,4 s/^/#/' bla.conf
And, replace the command in the script with:
sed -i '' "$1"' s/^/#/' "$2"
With GNU sed (to replace the files in place with the -i
option):
sed -i '14,18 s/^/#/' bla.conf
sed -i '14,18 s/^##*//' bla.conf
You can use Vim in Ex mode:
ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
g
global regexs
substitutex
save and close