Como usar GNU sed no Mac OS 10.10+, 'brew install --default-names' não é mais suportado

95

No Mac OS 10.10.3, instalei o gnu-sed digitando:

brew install gnu-sed --default-names

Quando eu digito novamente, recebo a mensagem:

gnu-sed-4.2.2 já instalado

No entanto, mesmo depois de reiniciar o sistema e reiniciar o Terminal, ainda não consigo usar a versão GNU do sed. Por exemplo:

echo a | sed s_A_X_i

retorna: sinalizador incorreto no comando de substituição 'i'

O que devo fazer para que a versão GNU funcione? Aqui estão os caminhos em minha variável $ PATH.

/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 

Lamento se minha pergunta parece óbvia, mas estou aprendendo script de shell por conta própria e ainda não entendo muito bem como os programas UNIX são instalados. Qualquer ajuda para usar comandos compatíveis com GNU (neste caso, sed, mas logo vou precisar de outros também) no meu Mac sem causar danos ou desordem desnecessária seria muito apreciada.

user3781201
fonte
2
Onde brewinstalou o GNU sed? Esse diretório está no seu PATH? O que você ganha se digitar sed --version? (BSD sedirá reclamar; GNU sedirá relatar suas informações de versão.) Até que você tenha o brewdiretório em seu PATH antes de /usr/binvocê aprender a usar o caminho absoluto para GNU sed, você não estará executando o GNU sed. Tenha cuidado com as aspas também. é uma citação de processamento de texto, ao contrário '.
Jonathan Leffler

Respostas:

112

Nota (2019):

A --with-default-namesopção foi removida desde janeiro de 2019, então agora essa opção não está mais disponível.

Ao instalar, o Homebrew instrui sobre como adaptar o caminho, se quiser usar o sed sem o gprefixo.


Você já tem o gnu-sed instalado sem a --with-default-namesopção.

  • Com --with-default-namesopção de instalação sedem/usr/local/bin/
  • Sem essa opção, ele instala gsed

Então, no seu caso, o que você precisa fazer é:

$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names

Atualize o caminho se necessário ...

$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'

ou use gsedcomo outros sugeriram.

Kashyap
fonte
8
A opção --with-default-names não é mais suportada
Amol
49

Quando você instala a versão GNU do sedpara Mac OS X usando:

$ brew install gnu-sed

O programa que você usa é gsed.

Então, por exemplo:

$ 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

Além disso, para elogiar o uso das ferramentas de comando GNU no Mac OS X, há uma boa postagem no blog aqui para obter as ferramentas do Linux:

Instale e use as ferramentas de linha de comando GNU no Mac OS / OS X

Anquegi
fonte
19

O sedque vem com o OS X está em /usr/bin.

o sed que homebrewinstala está em /usr/local/bin.

Se preferir usar homebrewum, você tem duas opções:

Opção 1

Toda vez que você quiser usar homebrew sed, digite

/usr/local/bin/sed

ou, de preferência

opção 2

Avance /usr/local/bin/(ou seja, antes) /usr/binem seu PATH em seu perfil de login, assim

 export PATH=/usr/local/bin:<other places>
Mark Setchell
fonte
16

$ brew install gnu-sed

$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

Com estes dois comandos o gnu-sed funciona corretamente

K Kishore
fonte
lembre-se de que isso só funciona para a sessão de terminal atual
maheshmnj
8

Se você precisa usar o comando gnu-sed com seus nomes normais, você pode adicionar um diretório "gnubin" ao seu PATH a partir do seu bashrc. Basta usar o seguinte comando em seu bash ou terminal.

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
imechemi
fonte
2

--with-default-namesnão funcionou para mim no Mac OS X 10.14.2 então eu criei um link simbólico chamado seda gsedmaior no$PATH

Eu também criei um link simbólico nomeado sed.1para a página de gsed.1manual superior no $MANPATHpara manacessar a página de gsedmanual ao invés da página de sedmanual padrão

chipsandslasa
fonte
4
Você também pode usar alias, por exemplo alias sed=gsed.
Kenorb