sed
Stream editor for filtering and transforming text.
Basic Usage
Print all lines (like cat).
sed '' [file]
Substitution
Basic Replace
Replace first occurrence per line:
sed 's/old/new/' [file]
Global Replace
Replace all occurrences:
sed 's/old/new/g' [file]
Case-Insensitive Replace
sed 's/old/new/gi' [file]
In-Place Editing
Edit File Directly
sed -i 's/old/new/g' [file]
Create Backup
sed -i.bak 's/old/new/g' [file]
Delete Lines
Delete Specific Line
Delete line 5:
sed '5d' [file]
Delete Line Range
Delete lines 5-10:
sed '5,10d' [file]
Delete Last Line
sed '$d' [file]
Delete Lines Matching Pattern
sed '/pattern/d' [file]
Delete Empty Lines
sed '/^$/d' [file]
Print Lines
Print Specific Line
Print line 5:
sed -n '5p' [file]
Print Line Range
Print lines 5-10:
sed -n '5,10p' [file]
Print Lines Matching Pattern
sed -n '/pattern/p' [file]
Insert and Append
Insert Before Line
Insert before line 5:
sed '5i\New line text' [file]
Append After Line
Append after line 5:
sed '5a\New line text' [file]
Insert Before Pattern
sed '/pattern/i\New line text' [file]
Replace Entire Line
Replace line matching pattern:
sed '/pattern/c\New line text' [file]
Multiple Commands
Using -e Flag
sed -e 's/old1/new1/' -e 's/old2/new2/' [file]
Using Semicolon
sed 's/old1/new1/; s/old2/new2/' [file]
Address Ranges
By Line Numbers
Lines 10-20:
sed '10,20s/old/new/' [file]
From Line to End
From line 10 to end:
sed '10,$s/old/new/' [file]
Pattern to Pattern
sed '/start/,/end/s/old/new/' [file]
Regular Expressions
Match Start of Line
sed 's/^pattern/replacement/' [file]
Match End of Line
sed 's/pattern$/replacement/' [file]
Capture Groups
sed 's/\([0-9]*\)-\([0-9]*\)/\2-\1/' [file]
Or with extended regex:
sed -E 's/([0-9]+)-([0-9]+)/\2-\1/' [file]
Common Patterns
Remove Leading Whitespace
sed 's/^[ \t]*//' [file]
Remove Trailing Whitespace
sed 's/[ \t]*$//' [file]
Remove All Whitespace
sed 's/[[:space:]]//g' [file]
Remove HTML Tags
sed 's/<[^>]*>//g' [file]
Character Translation
Change Case (Upper to Lower)
sed 's/.*/\L&/' [file]
Change Case (Lower to Upper)
sed 's/.*/\U&/' [file]
Add Line Numbers
sed = [file] | sed 'N;s/\n/\t/'
Extract Specific Lines
First Line
sed -n '1p' [file]
Last Line
sed -n '$p' [file]
Every Nth Line
Every 5th line:
sed -n '0~5p' [file]
Advanced Examples
Replace Only on Specific Line
Replace on line 10:
sed '10s/old/new/' [file]
Double Space File
sed 'G' [file]
Remove Double Spacing
sed 'N;s/\n\n/\n/' [file]
Comment Out Lines
Add # to start of lines 5-10:
sed '5,10s/^/#/' [file]
Uncomment Lines
Remove # from start of line:
sed 's/^#//' [file]
Remove Comments and Empty Lines
sed '/^#/d; /^$/d' [file]
Working with Multiple Files
Apply to Multiple Files
sed -i 's/old/new/g' *.txt
Common Use Cases
Convert DOS to Unix Line Endings
sed -i 's/\r$//' [file]
Convert Unix to DOS Line Endings
sed -i 's/$/\r/' [file]
Extract Email Domain
sed 's/.*@\(.*\)/\1/' emails.txt
Replace Multiple Spaces with Single Space
sed 's/ */ /g' [file]
Useful Flags
| Flag | Description |
|---|---|
-n | Suppress automatic output |
-i | Edit files in-place |
-e | Add script command |
-f | Read script from file |
-E | Use extended regex |
g | Global replacement |
p | |
d | Delete |
i | Insert |
a | Append |
c | Change line |