Linux

sed

Stream editor for filtering and transforming text.

#linux #text-processing #scripting

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

FlagDescription
-nSuppress automatic output
-iEdit files in-place
-eAdd script command
-fRead script from file
-EUse extended regex
gGlobal replacement
pPrint
dDelete
iInsert
aAppend
cChange line