Sed is a string editor program. It can manipulate data using regular expressions.
The basic syntax for sed is sed SCRIPT INPUTFILE
where a SCRIPT is the format used to replace or modify.
If you want to pass options, then the format is sed OPTIONS SCRIPT INPUTFILE
Here is a simple example that removes spaces from a string:
echo foo bar | sed 's/\ //' # returns foobar
In the script, characters that would be parsed by the shell need to be escaped.
Here are some of the common arguments that will be used.
First of all, if you are passing arguments, and not just a script, then you need to specify which argument is the script. The same example as before, using -e
or –expression
would look like this:
echo foo bar | sed -e 's/\ //' # returns foobar
You can load a script from a file instead of passing it as an expression. The syntax is the same, you still need to escape characters.
echo 's/\ //' > /tmp/rules.txt echo foo bar | sed -f /tmp/rules.txt
You can have sed update the file directly:
echo foo bar > /tmp/foobar.txt sed -e 's/\ //' /tmp/foobar.txt -i
BSD / Darwin: BSD's version of sed will use an extension given to -i
to create a backup file of the original. So sed -i .bar foo
will create foo.bar
while updating foo
as well. By comparison, GNU sed accepts an optional argument if given directly after the option: sed -i.bar
.
To workaround the inconsistency, you have two options. Pass an empty character after the option for both:
sed -i'' ...
Or, pass -i
as the last option:
sed ... -i
If you need to use regular expressions in the same format that egrep does, use -r
as well.
By default, sed will only replace the first occurrence of a match. With a regexp modifier, you can have it do more.
Use g
to replace all instances:
echo foo bar | sed 's/o//' #returns fo bar echo foo bar | sed 's/o//g' #returns f bar