2016-09-30 101 views
0

我很努力從grep獲得匹配結果。grep不匹配正則表達式

考慮下面的輸入文件的內容

{ 「富」:29, 「酒吧」:30}

和下面的命令grep -o '"[^"]+":[0-9]+' input.txt,我很期待兩個匹配的結果。據我所知它支持正則表達式,但我不明白爲什麼grep不會返回任何結果?

正則表達式的其他實現工作正常(https://regex101.com/r/RcONXk/1)。

+3

嘗試增加'-E'到grep命令行。 – dawg

+0

'-E'好像在工作,'-e'不好。我想我必須閱讀更多關於擴展正則表達式:)。你可以把它作爲答案嗎? – Caramiriel

+1

'-e'只是將正則表達式作爲下一個參數。例如,它避免了正則表達式可能以短劃線開頭的問題。或者它允許你有多個正則表達式。 –

回答

2

你可以試試這個;

grep -oE '"[^"]+":[0-9]+' 

如:

[email protected]:/tmp$ echo '{"foo":29, "bar":30}' | grep -oE '"[^"]+":[0-9]+' 
"foo":29 
"bar":30 

人的grep:

-E, --extended-regexp 
       Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.) 

Basic vs Extended Regular Expressions

0

默認情況下,grep與正則表達式不匹配。使用e標誌:

grep -oe 'pat' file 

或者使用egrep(自動將pattern作爲正則表達式)。

egrep -o 'pat' file 
+0

這不起作用(因爲'-e'),但另一條評論指出我可以使用'-E'。 – Caramiriel

+0

-E是擴展正則表達式,而-e只是正則表達式。我的錯! –

+1

沒問題,謝謝幫忙! :)'egrep'也可以 – Caramiriel