UNIX SED Introduction
· Sed is a “non-interactive” stream-oriented editor. Since its an “non-interactive” it can be used to automate editing.
· This allows you to edit multiple files, or to perform common editing operations without opening VI or emacs.
· Sed reads from a file or from its standard input and outputs to its standard output.
· Sed has two buffers which are called pattern buffer and hold buffer. Both are initially empty.
UNIX Sed Working Method
This is called as one execution cycle. Cycle continues till end of file/input is reached.
1. Read a entire line from stdin/file.
2. Removes any trailing newline.
3. Places the line, in its pattern buffer.
4. Modify the pattern buffer according to the supplied commands
5. Print the pattern buffer to stdout.
Printing Operation in Sed
Linux Sed command allows you to print only specific lines based on the line number or pattern matches. “p” is a command for printing the data from the pattern buffer.
Syntax:
# sed -n ‘ADDRESS’p filename
# sed -n ‘/PATTERN/p’ filename
Create the txt file sample.txt that will be used in all examples below.
# cat sample.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)
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.
Sed Address Format 1: NUMBER
This will only match Nth line in the input.
#sed –n ‘N’p filename
For example, 3p prints 3rd line of the input file sample.txt as below
# sed -n ‘3’p thegeekstuff.txt
3. Hardware
Sed Address Format 2: NUMBER1~NUMBER2
M~N with “p” command prints every Nth line starting from line M.
# sed -n ‘M~N’p filename
For example, 3~2p prints every 2nd line starting from 3rd line as shown below.
# sed -n '3~2'p thegeekstuff.txt
3. Hardware
5. Storage
7. Productivity (Too many technologies to explore)
9. Software Development
Sed Address Format 3: START,END
M,N with “p” command prints Mth line to Nth line.
# sed -n ‘M,N’p filename
For example, 4,8p prints from 4th line to 8th line from input file thegeekstuff.txt
# sed -n ‘4,8’p thegeekstuff.txt
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore)
8. Website Design
Sed Address Format 4: ‘$’ Last Line
$ with “p” command matches only the last line from the input.
# sed -n ‘$’p filename
For example, $p prints only the last line as shown below.
# sed -n '10.Windows- Sysadmin, reboot etc.
Sed Address Format 5: NUMBER,$
N,$ with “p” command prints from Nth line to end of file.
# sed -n ‘N,$p’ filenameFor example 4,$p prints from 4th line to end of file.
# sed -n '4,$p' thegeekstuff.txt
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore)
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.
Sed Pattern Format 1: PATTERN
PATTERN could be unix regular expression. The below command prints only the line which matches the given pattern.
# sed -n /PATTERN/p filenameFor example, following prints the line only which matches the pattern “Sysadmin”.
# sed -n /Sysadmin/p thegeekstuff.txt
1. Linux - Sysadmin, Scripting etc.
10.Windows- Sysadmin, reboot etc.
Sed Pattern Format 2: /PATTERN/,ADDRESS
# sed -n ‘/PATTERN/,Np’ filename
For example, following prints lines which matches the pattern to Nth line, from input. 3rd line matches the pattern “Hardware”, so it prints from 3rd line to 6th line.
# sed -n '/Hardware/,6p' thegeekstuff.txt
3. Hardware
4. Security (Firewall, Network, Online Security etc)
5. Storage
6. Cool gadgets and websites
Sed Pattern Format 3: ADDRESS,/PATTERN/
It prints from the Nth line of the input, to the line which matches the pattern. If the pattern doesnt match, it prints upto end of the input.
# sed -n ‘N,/PATTERN/p’ filenameFor example, 4th line matches the pattern “Security”, so it prints from 3rd line to 4th line.
# sed -n '3,/Security/p' thegeekstuff.txt
3. Hardware
4. Security (Firewall, Network, Online Security etc)
Sed Pattern Format 4: /PATTERN/,$
It prints from the line matches the given pattern to end of file.
# sed -n ‘/PATTERN/,$p’ filename# sed -n '/Website/,$p' thegeekstuff.txt
8. Website Design
9. Software Development
10.Windows- Sysadmin, reboot etc.
Sed Pattern Format 5: /PATTERN/,+N
It prints the lines which matches the pattern and next N lines following the matched line.
# sed -n ‘/PATTERN/,+Np’ filenameFor example, following prints the 5th line which matches the pattern /Storage/ and next two lines following /Storage/.
# sed -n '/Storage/,+2p' thegeekstuff.txt
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore)
Sed Pattern Format 6: /PATTERN/,/PATTERN/
Prints the section of file between two regular expression (including the matched line ).
# sed -n ‘/P1/,/P2/p’ filenameFor example, 5th line matches “Storage” and 8th line matches “Design”, so it prints 5th to 8th.
# sed -n '/Storage/,/Design/p' thegeekstuff.txt
5. Storage
6. Cool gadgets and websites
7. Productivity (Too many technologies to explore)
8. Website Design
Delete File Lines Using Address and pattern in Sed
“p” command prints the buffer (Remember to use “-n” option with “p”)
“d” command is just opposite, it’s for deletion. “d” will delete the pattern space buffer and immediately starts the next cycle.
Syntax:
# sed 'ADDRESS'd filename
# sed /PATTERN/d filename
Delete the Nth line.
“Nd” delete the Nth line and prints the other lines.
For example, 3d deletes 3rd line and prints other lines.
$sed 3d sample.txt
Delete Starting from 3rd line and every 2nd line from there.
$sed ‘3~2d’ sample.txt
Delete from 4ht to 8th line from file
$sed ‘4,8d’ sample.txt
Delete the last line from input
$sed ‘$d’ sample.txt
Delete the line which matches the given pattern from input
$sed /Sysadmin/d sample.txt
Delete the line from which matches the given pattern to end of the file
$sed ‘/Website/ ,$d’ sample.txt
Delete the line from which matches the given pattern and 2 lines next to that
$sed ‘Storage/ ,+2d’ sample.txt
Delete blank line from a file using sed.
$sed ‘/^$/d’ sample.txt
p thegeekstuff.txt
Sed Address Format 5: NUMBER,$
N,$ with “p” command prints from Nth line to end of file.
# sed -n ‘N,$p’ filenameFor example 4,$p prints from 4th line to end of file.
Sed Pattern Format 1: PATTERN
PATTERN could be unix regular expression. The below command prints only the line which matches the given pattern.
# sed -n /PATTERN/p filenameFor example, following prints the line only which matches the pattern “Sysadmin”.
Sed Pattern Format 2: /PATTERN/,ADDRESS
# sed -n ‘/PATTERN/,Np’ filename
For example, following prints lines which matches the pattern to Nth line, from input. 3rd line matches the pattern “Hardware”, so it prints from 3rd line to 6th line.
Sed Pattern Format 3: ADDRESS,/PATTERN/
It prints from the Nth line of the input, to the line which matches the pattern. If the pattern doesnt match, it prints upto end of the input.
# sed -n ‘N,/PATTERN/p’ filenameFor example, 4th line matches the pattern “Security”, so it prints from 3rd line to 4th line.
Sed Pattern Format 4: /PATTERN/,$
It prints from the line matches the given pattern to end of file.
# sed -n ‘/PATTERN/,$p’ filenameSed Pattern Format 5: /PATTERN/,+N
It prints the lines which matches the pattern and next N lines following the matched line.
# sed -n ‘/PATTERN/,+Np’ filenameFor example, following prints the 5th line which matches the pattern /Storage/ and next two lines following /Storage/.
Sed Pattern Format 6: /PATTERN/,/PATTERN/
Prints the section of file between two regular expression (including the matched line ).
# sed -n ‘/P1/,/P2/p’ filenameFor example, 5th line matches “Storage” and 8th line matches “Design”, so it prints 5th to 8th.
Delete File Lines Using Address and pattern in Sed
“p” command prints the buffer (Remember to use “-n” option with “p”)
“d” command is just opposite, it’s for deletion. “d” will delete the pattern space buffer and immediately starts the next cycle.
Syntax:
# sed ‘ADDRESS’d filename
# sed /PATTERN/d filename
Delete the Nth line.
“Nd” delete the Nth line and prints the other lines.
For example, 3d deletes 3rd line and prints other lines.
$sed 3d sample.txt
Delete Starting from 3rd line and every 2nd line from there.
$sed ‘3~2d’ sample.txt
Delete from 4ht to 8th line from file
$sed ‘4,8d’ sample.txt
Delete the last line from input
$sed ‘$d’ sample.txt
Delete the line which matches the given pattern from input
$sed /Sysadmin/d sample.txt
Delete the line from which matches the given pattern to end of the file
$sed ‘/Website/ ,$d’ sample.txt
Delete the line from which matches the given pattern and 2 lines next to that
$sed ‘Storage/ ,+2d’ sample.txt
Delete blank line from a file using sed.
$sed ‘/^$/d’ sample.txt
Latest posts by Rajesh Kumar (see all)
- Best AI tools for Software Engineers - November 4, 2024
- Installing Jupyter: Get up and running on your computer - November 2, 2024
- An Introduction of SymOps by SymOps.com - October 30, 2024