Regex grep捕获正则表达式

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捕获以下数据:

"\\.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 '"(\\\\\.[[: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