2015-10-14 4 views
0

При выполнении grep в OSX мои результаты неверны. Я ищу смещение подстроки с несколькими совпадениями, используя -aob. 'a', указывающий, что я использую строки, 'o', показывая только результат, и 'b' для смещения байта.BSD grep возвращает неверные результаты

echo "ABDABCABC" | grep -aob "ABC" 

С выходом:

0:ABC 
ABC 

Когда на самом деле, на выходе должно быть:

3:ABC 
6:ABC 

По умолчанию OSX использует BSD Grep, который, кажется, есть эта проблема. Я использую El Capitan, но другие пользователи Mac с более ранними версиями работают одинаково. Я попытался установить GNU grep через homebrew. Я не могу использовать его для grep, хотя grep -V возвращает, что он использует BSD. Сейчас у MacPorts есть некоторые проблемы, поэтому я не могу использовать это для установки.

Я также обновил bash до последней версии, поэтому я абсолютно уверен, что это не является источником моих проблем.

В другом примечании, использующем Perl альтернативы для grep, это не вариант, это для домашнего задания, и одно из условий - не использовать Perl.

У кого-нибудь есть решение для этого? Либо исправить проблему с BSD, либо использовать установленный homebrew GNU grep. Cheers.

ответ

0

BSD grep, кажется, дает только смещение байта к началу совпадающей строки, а не к найденному рисунку.

Что касается вашего вопроса о GNU grep. Я не использую Homebrew, но в соответствии с этим grep formula он устанавливается по умолчанию с префиксом g. Попробуйте: ggrep.

+0

Спасибо за ваш ответ. ggrep возвращает «Команда не найдена». Один из вариантов, который я пробовал: http://www.heystephenwood.com/2013/09/install-gnu-grep-on-mac-osx.html. Он создает символическую ссылку на недавно установленный grep, но «операция не разрешена» в/usr/bin/ggrep. Я попытался связать с/usr/local/bin/ggrep, но «Команда не найдена» остается. – Holderdash

+0

Да, символическая ссылка на '/ usr/local/bin/ggrep' работает. Когда я добавляю псевдоним 'alias grep =" ggrep "' и do 'grep -version', я получаю' -bash: ggrep: command not found' – Holderdash

+0

Он находится в пути, но не в первой позиции '/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin' – Holderdash

Смежные вопросы