2015-10-14 130 views
0

在OSX上执行grep时,我的结果不正确。我正在使用-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。我似乎无法将它用于grep,但grep -V返回它使用BSD。 MacPorts现在有一些问题,所以我不能用它来安装。

我也更新庆典到最新版本,所以我相当肯定,这不是我的烦恼之源。

在使用Perl替代品的grep另一个值得注意的是不是一种选择,这是一个家庭作业和的条件之一是不使用Perl。

有没有人有解决方案?要么解决BSD问题,要么使用已安装的自制软件GNU grep。 干杯。

回答

0

BSD grep似乎只给字节偏移匹配行的开头,而不是找到的模式。

关于你提到的有关GNU grep问题。我不使用自制软件,但根据此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“'并执行'grep --version'时,我得到'-bash:ggrep:command not found' – Holderdash

+0

它在路径中,但不在第一个位置'/ usr/local/sbin中:在/ usr/local/bin中:/ usr/sbin目录:在/ usr/bin中:/ sbin' – Holderdash