grep:正则表达式仅用于匹配括号之间的任何内容


Answers:


28

以下是一些选项,所有这些选项都可以输出所需的输出:

  1. 采用grep-o标志(只打印匹配线的一部分)和Perl兼容的正则表达式(-P)可以做lookarounds

    printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
    

    该正则表达式可能需要一些解释:

    • (?<=\():这是一个积极的眼光,一般格式是(?<=foo)bar并且将与bar在之后发现的所有情况匹配foo。在这种情况下,我们正在寻找一个开括号,因此我们使用\(了转义符。

    • (?=\)):这是一个正向的前瞻,仅与右括号匹配。

  2. 导致它仅打印任何行的匹配部分的-o选项grep,因此我们查找括号中的内容,然后使用删除它们sed

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. 用Perl解析整个过程:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
  4. 用以下内容解析整个内容sed

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.