#sed

##tldr

sh
sed -i "[range]s/[patern]/[replacement]/[options]" file_*
sed -i "2,5s|[patern]|[replacement]|[options]" file_*

###Search for text

Search for a string and only print the lines that were matched

sh
$ sed -n '/hello/p' file.txt

Case insensitive search

sh
$ sed -n '/hello/Ip' file.txt

###Sed Usage

Syntax

shell
$ sed [options] command [input-file]

With pipeline

sh
$ cat report.txt | sed 's/Nick/John/g'
sh
$ echo '123abc' | sed 's/[0-9]+//g'

###Option Examples

OptionExampleDescription
-ised -ibak ’s/On/Off/’ php.iniBackup and modify input file directly
-Esed -E ’s/[0-9]+//g’ input-fileUse extended regular expressions
-nsed -n ‘3 p’ config.confSuppress default pattern space printing
-fsed -f script.sed config.confExecute sed script file
-esed -e ‘command1’ -e ‘command2’ input-fileExecute multiple sed commands

###Multiple commands

sh
$ echo "hello world" | sed -e 's/h/H/g' -e 's/w/W/g'
Hello World

Use -e to execute multiple sed commands

###Sed script

sh
$ echo 's/h/H/g' >> hello.sed
$ echo 's/w/W/g' >> hello.sed
$ echo "hello world" | sed -f hello.sed
Hello World

Use -f to execute sed script file

###Examples

sh
$ sed 's/old/new/g' file.txt
$ sed 's/old/new/g' file.txt > new.txt
$ sed 's/old/new/g' -i file.txt
$ sed 's/old/new/g' -i.backup file.txt

###Sed Usage

Syntax

shell
$ sed [options] command [input-file]

With pipeline

sh
$ cat report.txt | sed 's/Nick/John/g'
sh
$ echo '123abc' | sed 's/[0-9]+//g'

###Option Examples

OptionExampleDescription
-ised -ibak ’s/On/Off/’ php.iniBackup and modify input file directly
-Esed -E ’s/[0-9]+//g’ input-fileUse extended regular expressions
-nsed -n ‘3 p’ config.confSuppress default pattern space printing
-fsed -f script.sed config.confExecute sed script file
-esed -e ‘command1’ -e ‘command2’ input-fileExecute multiple sed commands

###Multiple commands

sh
$ echo "hello world" | sed -e 's/h/H/g' -e 's/w/W/g'
Hello World

Use -e to execute multiple sed commands

###Sed script

sh
$ echo 's/h/H/g' >> hello.sed
$ echo 's/w/W/g' >> hello.sed
$ echo "hello world" | sed -f hello.sed
Hello World

Use -f to execute sed script file

###Examples

sh
$ sed 's/old/new/g' file.txt
$ sed 's/old/new/g' file.txt > new.txt
$ sed 's/old/new/g' -i file.txt
$ sed 's/old/new/g' -i.backup file.txt

##Sed commands

###Commands

CommandExampleDescription
psed -n ‘1,4 p’ input.txtPrint lines 1-4
psed -n -e ‘1,4 p’ -e ‘6,7 p’ input.txtPrint lines 1-4 and 6-7
dsed ‘1,4 d’ input.txtPrint lines except 1-4
wsed -n ‘1,4 w output.txt’ input.txtWrite pattern space to file
ased ‘2 a new-line’ input.txtAppend line after
ised ‘2 i new-line’ input.txtInsert line before

###Space commands

CommandDescription
nPrint pattern space, empty pattern space, and read next line
xSwap pattern space with hold space
hCopy pattern space to hold space
HAppend pattern space to hold space
gCopy hold space to pattern space
GAppend hold space to pattern space

###Flags

sh
$ sed 's/old/new/[flags]' [input-file]

FlagDescription
gGlobal substitution
1,2...Substitute the nth occurrence
pPrint only the substituted line
wWrite only the substituted line to a file
IIgnore case while searching
eSubstitute and execute in the command line

###Loops commands

CommandDescription
b labelBranch to a label (for looping)
t labelBranch to a label only on successful substitution
(for looping)
:labelLabel for the b and t commands (for looping)
NAppend next line to pattern space
PPrint 1st line in multi-line
DDelete 1st line in multi-line

###Misc Flags

FlagDescription
/ | ^ @ ! #Substitution delimiter can be any character
&Gets the matched pattern
( ) \1 \2 \3Group using ( and ).
Use \1, \2 in replacement to refer the group

##Sed examples

###Replacing text

Replace all occurrences of a string

sh
$ sed 's/old/new/g' file.txt

Replace only the nth occurrence of a string

sh
$ sed 's/old/new/2' file.txt

Replace a string only on the 5th line

sh
$ sed '5 s/old/new/' file.txt

Replace “world” with “universe” but only if the line begins with “hello”

sh
$ sed '/hello/s/world/universe/' file.txt

Remove “" from the end of each line

sh
$ sed 's/\\$//' file.txt

Remove all whitespace from beginning of each line

sh
$ sed 's/^\s*//' file.txt

Remove comments. Even those that are at the end of a line

sh
$ sed 's/#.*$//' file.txt

###Search for text

Search for a string and only print the lines that were matched

sh
$ sed -n '/hello/p' file.txt

Case insensitive search

sh
$ sed -n '/hello/Ip' file.txt

Search for a string but only output lines that do not match

sh
$ sed -n '/hello/!p' file.txt

###Appending lines

Append line after line 2

sh
$ sed '2a Text after line 2' file.txt

Append line at the end of the file

sh
$ sed '$a THE END!' file.txt

Append line after every 3rd line starting from line 3

sh
$ sed '3~3a Some text' file.txt

###Numbering

Number line of a file (simple left alignment)

sh
$ sed = file.txt | sed 'N;s/\n/\t/'

Number line of a file (number on left, right-aligned)

sh
$ sed = file.txt | sed 'N; s/^/   /; s/ *\(.\{6,\}\)\n/\1  /'

Number line of file, but only print numbers if line is not blank

sh
$ sed '/./=' file.txt | sed '/./N; s/\n/ /'

Count lines (emulates “wc -l”)

sh
$ sed -n '$='

###Prepending lines

Insert text before line 5

sh
$ sed '5i line number five' file.txt

Insert “Example: " before each line that contains “hello”

sh
$ sed '/hello/i Example: ' file.txt

###Deleting lines

Delete line 5-7 in file

sh
$ sed '5,7d' file.txt

Delete every 2nd line starting with line 3

sh
$ sed '3~2d' file.txt

Delete the last line in file

sh
$ sed '$d' file.txt

Delete lines starting with “Hello”

sh
$ sed '/^Hello/d' file.txt

Delete all empty lines

sh
$ sed '/^$/d' file.txt

Delete lines starting with “#”

sh
$ sed '/^#/d' file.txt

###File spacing

Double space

sh
$ sed G

Delete all blank lines and double space

sh
$ sed '/^$/d;G'

Triple space a file

sh
$ sed 'G;G'

Undo double-spacing

sh
$ sed 'n;d'

Insert a blank line above line which matches “regex”

sh
$ sed '/regex/{x;p;x;}'

Insert a blank line below line which matches “regex”

sh
$ sed '/regex/G'

Insert a blank line around line which matches “regex”

sh
$ sed '/regex/{x;p;x;G;}'

##Also see

###Replacing text

Replace all occurrences of a string

TEXT
$ sed 's/old/new/g' file.txt

Replace only the nth occurrence of a string

TEXT
$ sed 's/old/new/2' file.txt

Replace replace a string only on the 5th line

TEXT
$ sed '5 s/old/new/' file.txt

Replace “world” with “universe” but only if the line begins with “hello”

TEXT
$ sed '/hello/s/world/universe/' file.txt

Remove "” from the end of each line

TEXT
$ sed 's/\\$//' file.txt

Remove all whitespace from beginning of each line

TEXT
$ sed 's/^\s*//' file.txt

Remove comments. Even those that are at the end of a line

TEXT
$ sed 's/#.*$//' file.txt

###Search for text

Search for a string and only print the lines that were matched

TEXT
$ sed -n '/hello/p' file.txt

Case insensitive search

TEXT
$ sed -n '/hello/Ip' file.txt

Search for a string but only output lines that do not match

TEXT
$ sed -n '/hello/!p' file.txt

###Appending lines

Append line after line 2

TEXT
$ sed '2a Text after line 2' file.txt

Append line at the end of the file

TEXT
$ sed '$a THE END!' file.txt

Append line after every 3rd line starting from line 3

TEXT
$ sed '3~3a Some text' file.txt

###Numbering

Number line of a file (simple left alignment)

TEXT
$ sed = file.txt | sed 'N;s/\n/\t/'

Number line of a file (number on left, right-aligned)

TEXT
$ sed = file.txt | sed 'N; s/^/   /; s/ *\(.\{6,\}\)\n/\1  /'

Number line of file, but only print numbers if line is not blank

TEXT
$ sed '/./=' file.txt | sed '/./N; s/\n/ /'

Count lines (emulates “wc -l”)

TEXT
$ sed -n '$='

###Prepending lines

Insert text before line 5

TEXT
$ sed '5i line number five' file.txt

Insert “Example:” before each line that contains “hello”

TEXT
$ sed '/hello/i Example: ' file.txt

###Deleting lines

Delete line 5-7 in file

TEXT
$ sed '5,7d' file.txt

Delete every 2nd line starting with line 3

TEXT
$ sed '3~2d' file.txt

Delete the last line in file

TEXT
$ sed '$d' file.txt

Delete lines starting with “Hello”

TEXT
$ sed '/^Hello/d' file.txt

Delete all empty lines

TEXT
$ sed '/^$/d' file.txt

Delete lines starting with “#”

TEXT
$ sed '/^#/d' file.txt

###File spacing

Double space

TEXT
$ sed G

Delete all blank lines and double space

TEXT
$ sed '/^$/d;G'

Triple space a file

TEXT
$ sed 'G;G'

Undo double-spacing

TEXT
$ sed 'n;d'

Insert a blank line above line which matches “regex”

TEXT
$ sed '/regex/{x;p;x;}'

Insert a blank line below line which matches “regex”

TEXT
$ sed '/regex/G'

Insert a blank line around line which matches “regex”

TEXT
$ sed '/regex/{x;p;x;G;}'