2015-10-14 167 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