In the previous sed tutorial we discussed about Unix sed command basics and printing lines from a file using sed address and patterns.
In this article, let us review how to delete lines from a file using address and patterns with 8 awesome examples.
- “p” command prints the buffer (remember to use -n option with “p”)
- “d” command is just opposite, its for deletion. ‘d’ will delete the pattern space buffer and immediately starts the next cycle.
Syntax: # sed 'ADDRESS'd filename # sed /PATTERN/d filename
Syntax for ADDRESSES and PATTERNS given in the printing is applicable for deletion also, except -n option. (-n only to suppress printing pattern buffer, can be used with “p” command )
Let us first creates thegeekstuff.txt file that will be used in all the examples mentioned below.
# cat thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development 10.Windows- Sysadmin, reboot etc.
1. Delete Nth Line
‘Nd’ deletes the Nth line and prints the other lines.
sed ‘Nd’ filename
As per sed methodology,
- It reads the first line and places in its pattern buffer.
- Check whether supplied command is true for this line, if true, deletes pattern space buffer and starts next cycle. i.e Read next line.
- If supplied command doesnt true, as its normal behaviour it prints the content of the pattern space buffer.
For example, 3d deletes 3rd line and prints other lines as shown below.
$ sed 3d thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development 10.Windows- Sysadmin, reboot etc.
2. Delete Starting from 3rd line and every 2nd line from there.
$ sed '3~2d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 4. Security (Firewall, Network, Online Security etc) 6. Cool gadgets and websites 8. Website Design 10.Windows- Sysadmin, reboot etc.
3. Delete from 4th to 8th line from file.
$ sed '4,8d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 9. Software Development 10.Windows- Sysadmin, reboot etc.
4. Delete the last line from input.
$ sed '$d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development
5. Delete the line which matches the given pattern from input.
For example, the below command deletes the line which matches with “Sysadmin”.
$ sed /Sysadmin/d thegeekstuff.txt 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development
6. Deletes the line from which matches the given pattern to end of the file.
$ sed '/Website/,$d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available)
7. Deletes the line from which matches the given pattern and 2lines next to that.
$ sed '/Storage/,+2d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 8. Website Design 9. Software Development 10.Windows- Sysadmin, reboot etc.
8. Delete blank Line from a file using sed
You can also remove blank lines with sed. The following sed example shows how to use sed and remove blank lines.
$ sed '/^$/d' thegeekstuff.txt 1. Linux - Sysadmin, Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Hardware 4. Security (Firewall, Network, Online Security etc) 5. Storage 6. Cool gadgets and websites 7. Productivity (Too many technologies to explore, not much time available) 8. Website Design 9. Software Development 10.Windows- Sysadmin, reboot etc.
Linux provides several powerful administrative tools and utilities which will help you to manage your systems effectively. If you don’t know what these tools are and how to use them, you could be spending lot of time trying to perform even the basic administrative tasks. The focus of this course is to help you understand system administration tools, which will help you to become an effective Linux system administrator.Get the Linux Sysadmin Course Now!
If you enjoyed this article, you might also like..
|
|
|
|






My name is Ramesh Natarajan. I will be posting instruction guides, how-to, troubleshooting tips and tricks on Linux, database, hardware, security and web. My focus is to write articles that will either teach you or help you resolve a problem. Read more about
{ 14 comments… read them below or add one }
How to match “file path” and delete the matched line
The information about sed is very nice.
Nice tutorial…………Thanks
Nice notes ..very helpful ..
excellent work very useful
thanks !
very useful material..
thank you verymuch.
Venkat V
How to delete last 5 lines of file
Hi, How do i delete lines from second occurance of a string to end of file?
how can i delete multiple lines from a file ?
GNU sed version 4.2.1
sed ‘/word1/,/word2/d’ file1 > file2 works ok
but when i try more words…
sed ‘/word1/,/word2/,/word3/,/word4/d’ file1 > file2
sed: -e expression #1, char 16: unknown command: `,’
my question is how can i delete more words from a file .,. ?
Thanks
Very well explained…
how to delete multiple comment in unix
eg:
/*********************************************
*hello
**********************************************/
Hi,
I am trying to delete 18th line from file.
sed 18d /etc/passwd
After this command its hows 1-17th line and it looks 18th line is deleted. However when i am again checking cat /etc/passwd. It is showing me the 18th line ?
Can someone out some light on this or i am missing something?
@Saurabh :
Command is correct but , While using sed, output cannot be written into same file unless you use sed -i (new from Sed version 4.1.4)
Seems you are using older version.
try something like this:
sed ’18′d /etc/passwd > /tmp/passwd
cp /tmp/passwd /etc/passwd
sorry ! just for other visitors who has sidhant’s question :
“how to delete multiple comment in unix?”
—————————————————————-
sed ‘/\/\*/ {
# if you find /* branch to last label
b last
}
# branch to END OF CYCLE
b
# find last lable
:last
/\*\// !{
N
b last
}
d
‘
——————————————