如何仅匹配括号之间的单词
输入 :
this is (test.com)
期望输出:
test.com
答案1
以下是一些选项,所有这些选项都会打印所需的输出:
使用
grep
标志-o
(仅打印行的匹配部分)和 Perl 兼容正则表达式 (-P
) 可以做到环顾四周:printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
该正则表达式可能需要一些解释:
(?<=\()
: 这是一个积极的后视,一般格式为(?<=foo)bar
和 ,它将匹配bar
紧随其后找到的所有情况foo
。在本例中,我们正在寻找左括号,因此我们使用\(
转义它。(?=\))
: 这是一个积极的前瞻并且简单地匹配右括号。
选项
-o
导致grep
它只打印任何行的匹配部分,因此我们查找括号中的内容,然后使用以下命令删除它们sed
:printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
用 Perl 解析整个内容:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
解析整个事情
sed
:printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
答案2
一种方法是使用PCRE - Perl 兼容的正则表达式和grep
:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com