Regex grep捕获正则表达式
我正在尝试使用grep捕获以下数据: "\\.xy$" "\\.ab$" "\\.ef\\.hi$" “\\.xy$” “\\.ab$” “\\.ef\\.hi$” 我有 grep -Eo "((\\\\\.[a-zA-Z]+)){1,2}\\$" file grep-Eo“(([a-zA-Z]+){1,2}\\\$”文件 两个问题:Regex grep捕获正则表达式,regex,grep,capture-group,Regex,Grep,Capture Group,我正在尝试使用grep捕获以下数据: "\\.xy$" "\\.ab$" "\\.ef\\.hi$" “\\.xy$” “\\.ab$” “\\.ef\\.hi$” 我有 grep -Eo "((\\\\\.[a-zA-Z]+)){1,2}\\$" file grep-Eo“(([a-zA-Z]+){1,2}\\\$”文件 两个问题: 它可以捕获\\.xy$之类的内容,但不能捕获\\.xy\\.ef$ 返回的结果最后有文字$,为什么 在美元前面加一个反斜杠: % grep -Eo '"(\\\
% grep -Eo '"(\\\\\.[[:alpha:]]+){1,2}\$"' input
"\\.xy$"
"\\.ab$"
"\\.ef\\.hi$"
或者将特殊字符放在方括号中,我觉得这样更容易阅读:
% grep -Eo '"([\]{2}[.][[:alpha:]]+)+"' input
"\\.xy$"
"\\.ab$"
"\\.ef\\.hi$"
您已双重转义了$-请尝试以下操作:
grep -Eo '"((\\\\\.[a-zA-Z]+)){1,2}\$"' file
尝试使用扩展的grep
egrep
,更好地支持正则表达式。@pavium:我刚刚尝试使用egrep-o,结果完全相同请注意,正则表达式末尾的$
没有转义。@pavium:egrep与OP使用的grep-E
相同。很好@Johnsyweb,谢谢。使用一个\来逃避$I capture nothing。几乎可以,我喜欢第二种方法,一个问题是:$仍然显示在结果中,但它不是捕获组的一部分,为什么?-o
表示“只显示行的匹配部分”,而不是捕获组(…)”
。“几乎有效”是什么意思?@user775187:你不能使用grep,但这会起作用:grep'[$]“$”input{2}.[\]{2}.[:alpha:][]+){1,2}'
你可以在可读性版本中再消除一个反斜杠:grep-Eo'([\]{2}.[:alpha:]+++++[$]”input