Line Addressing
Print specific line — line 3 of /etc/passwd
sed -n '3p' /etc/passwd
Print line range — lines 5 through 10
sed -n '5,10p' /etc/passwd
Print from pattern to pattern — inclusive range
sed -n '/^root/,/^daemon/p' /etc/passwd
Print odd lines — step addressing (GNU sed)
sed -n '1~2p' /etc/passwd
Print even lines — step addressing (GNU sed)
sed -n '2~2p' /etc/passwd
Delete a specific line — line 1 (remove header)
cat <<'EOF' > /tmp/data.csv
hostname,ip,status
ise-01,10.50.1.20,active
ad-dc,10.50.1.50,standby
pfsense,10.50.1.1,active
EOF
sed '1d' /tmp/data.csv
Delete a range of lines — lines 2 through 4
sed '2,4d' /etc/services | head -5
Delete from pattern to end of file
cat <<'EOF' > /tmp/notes.txt
Important content here
More important stuff
== SCRATCH ==
temporary junk
delete this too
EOF
sed '/== SCRATCH ==/,$d' /tmp/notes.txt
Substitute only on a specific line number
cat <<'EOF' > /tmp/servers.txt
server=10.50.1.20
server=10.50.1.50
server=10.50.1.1
EOF
sed '2s/10.50.1.50/10.50.1.51/' /tmp/servers.txt
Substitute within a pattern range only
cat <<'EOF' > /tmp/block.conf
[production]
timeout=30
retries=3
[staging]
timeout=60
retries=5
[development]
timeout=120
retries=10
EOF
sed '/\[staging\]/,/\[/s/retries=5/retries=8/' /tmp/block.conf