View selected lines of a document/file
# sed -n ‘9,20p’ file.txt
View the entire file except selected lines
# sed ‘21,40d’ file.txt
Replacing words or characters in a file
# sed ‘s/centos/ubuntu/g’ file.txt
To make changes permanent, you can use option ‘-i’
# sed -i ‘s/centos/ubuntu/g’ file.txt
flag /g (global replacement)
Use the combination of /1, /2 etc and /g to replace all the patterns from the nth occurrence of a pattern in the file.
# sed ‘s/centos/ubuntu/4g’ file.txt
Using regular expressions
To remove empty lines or those beginning with #
from the Apache configuration file, do:
# sed ‘/^#|^$| *#/d’ my.cnf
The caret sign followed by the number sign (^#)
indicates the beginning of a line, whereas ^$
represents blank lines. The vertical bars indicate boolean operations, whereas the backward slash is used to escape the vertical bars.
In this particular case, the Apache configuration file has lines with #’s
not at the beginning of some lines, so *#
is used to remove those as well.
To replace a word beginning with uppercase or lowercase with another word, we can also use sed. To illustrate, let’s replace the word zip or Zip with rar in file.txt:
# sed ‘s/[Zz]ip/tar.gz/g’ file.txt
Performing multiple substitutions in a single command
# sed -i ‘s/ubuntu/centos/gi;s/plesk/cpanel/gi’ file.txt
Combine sed with other commands
Firstly, replace multiple blank spaces with a single space, we will use the output of ip route show
and a pipeline
Print the lines beginning with src.
Then convert multiple spaces into a single one. Finally, cut the 9th field (considering a single space as field separator), which is where the IP address is:
# ip route show | sed -n ‘/src/p’ | sed -e ‘s/ */ /g’ | cut -d’ ‘ -f9