2013-10-16 63 views
15

我試圖使用grep,就像我習慣於從Linux那裏獲得的所有驚人功能和RegEx的所有功能一樣......但在Mac OS X上,它並不像我期望的那樣工作。grep在OSX上的工作方式是不同的

如果我使用「-P」(Perl正則表達式)它給了我「使用」( - 幫助)輸出。 在那裏,我們在參數列表中找到「-P」參數「-abcDEFGHhIiJLlmnOoPqRSsUVvwxZ」... 仍然無法正常工作。

另一個例子是星號或加號。 我想這http://wiki.bash-hackers.org/howto/conffile

要檢查內容不當的配置文件指令使用:

if egrep -q -v '^#|^[^ ]*=[^;]*' "$configfile"; then 
    echo "Config file is unclean, cleaning it..." >&2 
    # filter the original to a new file 
    egrep '^#|^[^ ]*=[^;&]*' "$configfile" > "$configfile_secured" 
    configfile="$configfile_secured" 
fi 

而且它不會對線這樣的工作:

DATABASE=some_database; ls -la 

我在做什麼錯誤? 因爲所有這些在Linux機器上工作得很好。

+0

這個問題似乎是脫離主題,因爲它是一個不明智的咆哮。 –

+0

10.8中包含的grep版本不支持'-P'。 'grep -V'返回10.8中的grep(BSD grep)2.5.1-FreeBSD'和10.7中的'grep(GNU grep)2.5.1'。你可以用'brew tap homebrew/dupes安裝更新版本的GNU grep; brew安裝homebrew/dupes/grep' – user495470

+3

不太公平,喬納森。我應該更好地選擇我的語言,但問題仍然存在。 我在問問題以獲取消息,所以很明顯,我提出的問題是「知情不足」。 雖然我得到了很好的答案。 感謝大家。 – func0der

回答

7

Ubuntu的(當然,我的古Ubuntu的8箱我坐在旁邊的...):

$ grep -V 
GNU grep 2.5.3 

OS X:

$ grep -V 
grep (BSD grep) 2.5.1-FreeBSD 

呀;他們是不同的節目。 OS X不是Linux。它基於BSD。

如果您需要帶有各種擴展名的grep的GNU版本,您可以使用Homebrew輕鬆安裝。

+0

安裝了自制軟件,但是'grep -V'仍然會打印'FreeBSD'。 –

+3

你必須使用'ggrep'。 –

+0

你也可以爲你的ggrep創建別名,所以它被用來代替系統。 – mjp

3

的Mac OS X是基於BSD,並且不使用您習慣的GNU工具。我讀了POSIX grep,因爲沒有GNU擴展,你會無緣無故地被激怒。一切都應該是可能的,只是不像你習慣的那樣。

+0

謝謝。 但是你有沒有解釋我的問題的不匹配部分?關於擴展正則表達式的段落(http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04)表示它可能導致像「*」和「+」這樣的字符的未定義結果似乎沒有適用於此。 那我爲什麼沒有結果呢? – func0der

+0

@ func0der對不起,我不說正則表達式';-)'。最快的解決方案是安裝GNU grep,無論是從源代碼還是通過自制軟件/ macports/... – rubenvb

+0

是的,但我不是爲自己寫這些腳本,而是爲使用開箱即用OSX的同事。 感謝您的回答:) – func0der

相關問題