如何仅在括号之间匹配单词
输入 : this is (test.com)
需求输出: test.com
以下是一些选项,所有这些选项都可以打印所需的输出:
采用grep
与-o
标志(只打印匹配线的一部分)和Perl兼容的正则表达式(-P
)可以做lookarounds:
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/'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句