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

Rah*_*til 25 grep regular-expression

如何仅在括号之间匹配单词

输入 : this is (test.com)

愿望输出: test.com

ter*_*don 35

这里有几个选项,所有选项都打印所需的输出:

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

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

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

    • (?<=\():这是一个积极的回顾,一般格式是(?<=foo)bar,将匹配所有bar找到的情况foo。在这种情况下,我们正在寻找一个左括号,因此我们使用\(它来转义它。

    • (?=\)):这是一个积极的前瞻,只匹配右括号。

  2. -o选项将grep导致其只能打印任何线路的匹配一部分,所以我们找无论是在括号,然后用删除它们sed

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 用 Perl 解析整个事情:

    printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 解析整个事情sed

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    
    Run Code Online (Sandbox Code Playgroud)


slm*_*slm 5

一种方法是使用PCRE - Perl兼容的正则表达式grep

$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com
Run Code Online (Sandbox Code Playgroud)

参考