Rah*_*til 25 grep regular-expression
如何仅在括号之间匹配单词
输入 :
this is (test.com)
愿望输出:
test.com
ter*_*don 35
这里有几个选项,所有选项都打印所需的输出:
采用grep
与-o
标志(只打印匹配线的一部分)和Perl兼容的正则表达式(-P
)可以做lookarounds:
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
Run Code Online (Sandbox Code Playgroud)
该正则表达式可能需要一些解释:
(?<=\()
:这是一个积极的回顾,一般格式是(?<=foo)bar
,将匹配所有bar
找到的情况foo
。在这种情况下,我们正在寻找一个左括号,因此我们使用\(
它来转义它。
(?=\))
:这是一个积极的前瞻,只匹配右括号。
该-o
选项将grep
导致其只能打印任何线路的匹配一部分,所以我们找无论是在括号,然后用删除它们sed
:
printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
Run Code Online (Sandbox Code Playgroud)用 Perl 解析整个事情:
printf "this is (test.com)\n" | perl -pe 's/.*\((.+?)\)/$1/'
Run Code Online (Sandbox Code Playgroud)解析整个事情sed
:
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
Run Code Online (Sandbox Code Playgroud)一种方法是使用PCRE - Perl兼容的正则表达式有grep
:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com
Run Code Online (Sandbox Code Playgroud)