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

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

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

输入 : this is (test.com)

期望输出: test.com

答案1

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

  1. 使用grep标志-o(仅打印行的匹配部分)和 Perl 兼容正则表达式 ( -P) 可以做到环顾四周:

    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/'
    

答案2

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

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

参考

相关内容