A Simple Introduction to Sed

Sed
Sed is also a unix text manipulation tool most commonly used to replace the occurrence of one set of characters with another in a specified file. Sed also supports more complex regular expressions for efficent string manipulation.
Sed command syntax

If the contents of myfile.txt were as follows:
Java is the best programming language,
thousands of programmers use Java everyday.
Running the above Sed command would produce the following output:
Ruby is the best programming language,
thousands of programmers use Ruby everyday.
Common Sed options
-i
: Rewrite file(s) in-place instead of printing to standard output.
-E
: Extended RegEx. More info
These are probably the most common options you’ll see used with Sed, but there are others.
Sed examples
String replacement
Replace all occurances of one string with another. In this case, replace all occurances of “Jack” with “Jill”
sed 's/Jack/Jill/g' rhyme.txt
Only replace the first occurance of a match in a line
Removing the trailing g
from the Sed search pattern will tell Sed to only operate on the first occurance of the search pattern in a line
sed 's/Jack/Jill/' rhyme.txt
String replacement with RegEx
By default, the Sed search expression supports RegEx special characters; however, adding the -E
flag prevents you from needing to escape characters like parenthesis.
sed -E 's/(.*) (.*)/\2, \1/' names.txt
In the above example, given I have a file of name formatted as “FIRST LAST”,
Kumail Nanjiani
Thomas Middleditch
I use parenthesis as capture groups, then rewrite the lines in the opposite order they appear as “LAST, FIRST”:
Nanjiani, Kumail
Middleditch, Thomas
Regular expressions is a large topic. To dive deeper I recommend this resource.
Replace the contents of a file
Use the -i
option to instruct Sed to overwrite the contents of rhyme.txt instead of printing to standard output.
sed -i 's/Jack/Jill/g' rhyme.txt
A note For MacOS terminal users who receive this error:
sed: -I or -i may not be used with stdin
The MacOS version of Sed requires that the -i
be proceeded by an argument that specifies a backup file be created instead of overwriting the original. See the next example for instructions on how to do this…
Replace the contents of a file, but also create a backup
-i
itself can take an optional argument that tells it to create a backup of the original file before making changes. In this case the file “rhyme.txt.original” will be created
sed -i.original 's/Jack/Jill/g' rhyme.txt
-i.original
is short for --in-place=.original