Yarin Yarin - 22 days ago 10
Linux Question

sed command with -i option failing on Mac, but works on Linux

I've successfully used the following

sed
command to search/replace text in Linux:

sed -i 's/old_link/new_link/g' *


However, when I try it on my Mac OS X, I get:


"command c expects \ followed by text"


I thought my Mac runs a normal BASH shell. What's up?

EDIT:

According to @High Performance, this is due to Mac
sed
being of a different (BSD) flavor, so my question would therefore be how do I replicate this command in BSD
sed
?

EDIT:

Here is an actual example that causes this:

sed -i 's/hello/gbye/g' *

Answer

If you use the -i option you need to provide an extension for your backups.

If you have:

File1.txt
File2.cfg

The command:

sed -i '.original' 's/old_link/new_link/g' *

create 2 backup files like:

File1.txt.original
File2.cfg.original

There is no portable way to avoid making backup files because is impossible to find a mix of sed commands that works on all cases:

  • sed -i -e ... - doe not work on OS X as it creates -e backups
  • sed -i'' -e ... - does not work on OS X 10.6 but works on 10.9+
  • sed -i '' -e ... - not working on GNU