2011-06-13 100 views
2

我試圖使用grep來捕獲以下數據:grep的正則表達式捕獲

 

"\\.xy$" 
"\\.ab$" 
"\\.ef\\.hi$" 

 
grep -Eo "((\\\\\.[a-zA-Z]+)){1,2}\\$" file 

兩個問題:

  1. 它可以捕捉的東西像\\。 xy $,但不是\\。xy \\ .ef $
  2. 返回的結果在最後有文字$,爲什麼?
+0

嘗試使用* extended grep *'egrep',並更好地支持正則表達式。 – pavium 2011-06-13 02:09:20

+0

@pavium:我剛剛嘗試過egrep -o,結果完全一樣 – user775187 2011-06-13 02:11:05

+0

請注意,正則表達式末尾的'$'沒有被轉義。 – 2011-06-13 02:12:05

回答

2

先於美元與反斜線:

% grep -Eo '"(\\\\\.[[:alpha:]]+){1,2}\$"' input 
"\\.xy$" 
"\\.ab$" 
"\\.ef\\.hi$" 

或者將特殊字符轉換爲方括號,我覺得這更易讀:

% grep -Eo '"([\]{2}[.][[:alpha:]]+)+"' input 
"\\.xy$" 
"\\.ab$" 
"\\.ef\\.hi$" 
+0

幾乎可行,我喜歡第二種方法,一個問題:$仍然顯示在結果中,但它不是捕獲組的一部分,爲什麼? – user775187 2011-06-13 02:35:31

+0

'-o'表示「只顯示行的匹配部分」,而不是捕獲組「(...)」。你的意思是「幾乎可行?」 – Johnsyweb 2011-06-13 02:48:56

+0

我如何顯示捕獲組(...) – user775187 2011-06-13 04:14:27

0

您已經雙逃脫$ - 試試這個:

grep -Eo '"((\\\\\.[a-zA-Z]+)){1,2}\$"' file 
+0

與一個\轉義$我什麼也沒有捕獲。 – user775187 2011-06-13 02:31:53