Como usar o GNU sed no Mac OS X

No Mac OS 10.10.3, instalei o gnused digitando:

brew install gnu-sed --default-names 

Quando eu o 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: bad flag no comando de substituição ‘i’

O que devo fazer para que a versão GNU funcione? Aqui estão os caminhos na 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 

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

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

  • Com a opção --with-default-names ele instala o sed em /usr/local/bin/
  • Sem essa opção, 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 gsed como outros sugeriram.

Quando você instala sed a versão gnu, para mac os x usando:

 brew install gnu-sed 

O programa que você usa é gsed

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 complementar o uso das ferramentas de comando do gnu no mac OSX, há um bom post aqui para obter as ferramentas do linux:

Instalar e usar as ferramentas de linha de comando GNU no macOS / OS X

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

O sed que o homebrew instala está em /usr/local/bin .

Se você preferir usar o homebrew one, você tem duas opções:

Opção 1

Toda vez que você quiser usar o homebrew sed , digite

 /usr/local/bin/sed 

ou, de preferência

opção 2

Mova /usr/local/bin/ ahead (ou seja, antes) /usr/bin em seu PATH em seu perfil de login, como este

  export PATH=/usr/local/bin: 

Se você instalar o brew install coreutils , você obterá sed e um monte de outras versões do GNU, como tar, date, etc. Estas são todas instaladas em / usr / local / bin e recebem o prefixo ‘g’. Então, após a instalação, se você quiser a versão GNU do sed, você gsed . Funciona bem.

Se você precisar 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 no seu bash ou terminal.

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