Here's some hints on using sed.


In-place replacement (GNU)

sed -i -e 's/foo/bar/'

In GNU sed: use -i without arg.

In-place replacement (BSD)

sed -i '' -e 's/foo/bar/'

In OSX, -i '' is required.

In-place Multiple replacements

sed -i 's/match1/replace1/g; s/match2/replace2/g' \

replace different matches with different values

sed -i 's/\(MATCH1\|MATCH2\)/VALUE/g' \

replace multiple matches with the same value

File regions

sed '/begin api/q'
sed '/^# begin/,$d'
sed -n '/end api/,$p'

Print after a given line is found.

sed -n '/regex/!p'

Print everything except lines matching regex. Useful for printing files with comments.

Printing REGEX ranges

sed -n -e '/^START$/,/^END$/p'

suppress output and print REGEX range include (^START$,^END$) lines.

OR without “-n” (same result)

sed -e '/^START$/,/^END$/p;d'

print REGEX range and delete other output, the [;] character means run another expression on the input file which is ‘d’ stands for delete .

Append a text after a specific line number

sed -e "1a ## HEADING 02:"

this appends “## HEADING 02:” after the first line in the file and print the result to stdout replace -e with -i to write the file .

Insert text before a specific line number

sed -e "1i # HEADING 01:"

the same as appending but before the first line.

Deleting text

With line number

sed -e "1,5d"

delete a RANGE (i.e. including lines 1 to 5)

sed -e '1,5!d'

delete everything (i.e. excluding lines 1 to 5) it is better to quote sed expressions with single quotes especially when there is a [!] character.

With REGEX matching

sed -e "/REGEX/Id"

delete lines with /REGEX/ matched /I is for insensitive search

sed -e '/REGEX/Ip;d'

this invert the previous sed command delete everything (excluding lines with REGEX)

0 Comments for this cheatsheet. Write yours!