Por que o grep -o -w não está me dando a saída esperada no Mac OS X?

4

Se eu fizer echo foo bar baz | grep -o -w baz , a saída será foo bar baz (e uma nova linha extra).
A saída esperada seria baz , já que a opção -o deve exibir apenas a peça correspondente.
Estou usando o Mac OS X 10.7.1 e a versão do grep é grep (GNU grep) 2.5.1

    
por Tyilo 21.08.2011 / 00:03

4 respostas

2

Há uma solução alternativa usando a sintaxe grep regex para corresponder a string vazia no início e no final de uma palavra!

# grep regex syntax for matching words only
man grep | less -p '\<'

# POSIX 1003.2 regular expression syntax for matching words only
# should work for sed, ed, ...
man re_format | less -p '\[\[:<:\]\]'

echo 'foo bar baz' | egrep -o '\<baz\>'

echo 'foo bar baz' | sed -n '/.*[[:<:]]\(baz\)[[:>:]].*/s///p'

Se você insistir em usar grep % bandeira%, tente o pré-compilado Rudix 2010 -w binário (grep-2.5.4-1.dmg).

link

    
por 22.08.2011 / 12:04
0

Parece um erro para mim. Se você não se importa em usar o grep de macports (v 2.9), ele se comporta da maneira esperada.

2.5.1 parece está longe de ser a última versão, mas eu suponho que você poderia tentar preencher um bug com a Apple.

    
por 21.08.2011 / 02:50
0

Alternativamente, você poderia instalar uma versão mais nova do GNU grep através do Homebrew :

brew tap homebrew/dupes; brew install homebrew/dupes/grep

Faça o seguinte:

$ echo foo bar baz | /usr/local/bin/ggrep -o -w baz
baz
    
por 02.12.2012 / 18:24
0

Em 10.8, /usr/bin/grep foi substituído por uma versão diferente do grep, o que não parece ter esse problema:

$ echo foo bar baz | grep -o -w baz
baz
$ grep -V
grep (BSD grep) 2.5.1-FreeBSD

10,7:

$ echo foo bar baz | grep -o -w baz
foo bar baz

$ grep -V
grep (GNU grep) 2.5.1

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
por 17.10.2013 / 01:43

Tags