Reputation: 1301
Under Mac OS 10.10.3, I installed gnu-sed by typing:
brew install gnu-sed --default-names
When I type it again, I get the message:
gnu-sed-4.2.2 already installed
However, even after rebooting the system and restarting Terminal, I still cannot use the GNU version of sed. For example:
echo a | sed ’s_A_X_i’
returns: bad flag in substitution command 'i'
What should I do to get the GNU version working? Here are the paths in my $PATH variable.
/Users/WN/-myUnix
/opt/local/bin
/opt/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/Applications/calibre.app/Contents/MacOS
/opt/ImageMagick/bin
/usr/texbin
I'm sorry if my question seems obvious, but I am learning shell scripting on my own and don't quite understand yet how UNIX programs are installed. Any help to use GNU compliant commands (in this case sed, but soon I'll need others as well) on my Mac without causing damage or unnecessary clutter would be greatly appreciated.
Upvotes: 117
Views: 109847
Reputation: 1680
Once --with-default-names
is no longer supported, you can install it normally with brew install gnu-sed
and then get its path with brew info gnu-sed
.
brew install gnu-sed
brew info gnu-sed
output:
...
==> Caveats
GNU "sed" has been installed as "gsed".
If you need to use it as "sed", you can add a "gnubin" directory
to your PATH from your bashrc like:
PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
==> Analytics
...
Then use it in your path:
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
Upvotes: 3
Reputation: 1893
When running brew install gnu-sed
on latest homebrew it reports at the end:
==> Caveats
GNU "sed" has been installed as "gsed".
If you need to use it as "sed", you can add a "gnubin" directory
to your PATH from your bashrc like:
PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:$PATH"
gnu-sed
installs by default as gsed
. However, if you look in /opt/homebrew/opt/gnu-sed/libexec/gnubi
you'll find a sed
command. So following the above instructions to update the path should mean sed
runs gnu-sed
.
Upvotes: 3
Reputation: 26
A slightly faster way to do what @pjz suggests is the following:
for p in $(ls -d ${HOMEBREW_PREFIX:-/usr/local}/Cellar/*/*/libexec/gnubin); do
export PATH="${p}:${PATH}"
done
Of course this assumes every GNU package in brew
will always have the same level of directories to get to gnubin
.
Alternatively, you can speed up find
by adding the -maxdepth 4
flag before -type d
to reduce how far it has to do into directories.
Upvotes: 0
Reputation: 43087
Since the --with-default-names
option was removed in Jan. 2019, my hack solution is:
# hack to override mac tools with homebrew versions (ls, sed, etc)
for p in `find "${HOMEBREW_PREFIX}" -type d -name gnubin` ; do
export PATH="${p}:${PATH}"
done
which is a little slow (crawling the dir every login) but works without forcing me to modify my .bashrc
for every gnu tool I happen to install with brew.
Upvotes: 0
Reputation: 11
this export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
is only valid per terminal SESSIOn as soon as you restart its GONE ( Mojave )
Upvotes: 1
Reputation: 271
$ brew install gnu-sed
$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
With these two commands gnu-sed works properly
Upvotes: 27
Reputation: 17476
Note (2019):
The --with-default-names
option is removed since January 2019, so now that option is not available anymore.
When installing, Homebrew instructs on how to adapt the path, if one wants to use sed without the g
prefix.
You already have the gnu-sed installed without the --with-default-names
option.
--with-default-names
option it installs sed
to /usr/local/bin/
gsed
So in your case what you gotta do is:
$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names
Update path if needed...
$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'
or use gsed
as others suggested.
Upvotes: 125
Reputation: 21
--with-default-names
didn't work for me on Mac OS X 10.14.2 so I created a symlink named sed
to gsed
higher in the $PATH
I also created a symlink named sed.1
to the gsed.1
manpage higher in the $MANPATH
so man
would access the gsed
manpage instead of the default sed
manpage
Upvotes: 2
Reputation: 11522
When you install the GNU version of sed
for Mac OS X using:
$ brew install gnu-sed
The program that you use is gsed
.
So for example:
$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken
Also, to compliment the use of GNU command tools on Mac OS X, there is a nice blog post here to get the tools from linux:
Install and use GNU command line tools on Mac OS/OS X
Upvotes: 72
Reputation: 5881
If you need to use gnu-sed command with their normal names, you can add a "gnubin" directory to your PATH from your bashrc. Just use the following command in your bash or terminal.
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
Upvotes: 9
Reputation: 207650
The sed
that ships with OS X is in /usr/bin
.
The sed
that homebrew
installs is in /usr/local/bin
.
If you prefer to use the homebrew
one, you have two options:
Option 1
Every time you want to use homebrew
sed
, type
/usr/local/bin/sed
or, preferably
Option 2
Move /usr/local/bin/
ahead (i.e. before) /usr/bin
in your PATH in your login profile, like this
export PATH=/usr/local/bin:<other places>
Upvotes: 21