2011-06-13 105 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