2015-08-31 50 views
2

$置於方括號內不適用於grep。

~ $ echo -e "hello\nthere" > example.txt 
~ $ grep "hello$" example.txt 
hello 
~ $ grep "hello[$]" example.txt 
~ $ 

這是grep中的錯誤還是我做錯了什麼?

+0

有問題。 '[$]'是字符'$'的字符類。這就是'[]'的用途。 –

回答

7

這就是它應該做的。

[$] 

...定義了匹配一個字符的字符類,$

因此,這將匹配包含hello$的行。


請參閱the POSIX RE Bracket Expression definition正式規範要求這樣做。從該完整定義引用:

括號表達式中(包含在方括號中的表達式中,「[]」)是一個RE的是應匹配包含在非空集由下式表示集合元素的單個排序元素括號表達式。

因此,任何括號表達式都與單個元素匹配。


此外,在the BRE Anchoring Expression definition:

  • 美元符號( '$'),爲整個BRE的最後一個字符使用時應當是錨。當作爲子表達的最後一個字符使用時,實現可能將美元符號視爲錨點。美元符號應將表達式(或可選的子表達式)固定到匹配字符串的末尾;美元符號可以說是匹配最後一個字符後面的字符串結尾。
  • 因此 - 如BRE,正則表達式格式grep識別由默認不帶參數的 - 如果$不在表達的端部,它不需要被識別爲一個錨定件。

    相關問題