sed匹配多个匹配中的第一个模式

sed匹配多个匹配中的第一个模式,sed,non-greedy,Sed,Non Greedy,对于给定的文本,比如 a[测试]asdfasdf[sdfsdf]b 我想要第一个匹配的文本,它位于第一个方括号内(regex=[.*),因此在本例中是[test] 我尝试了以下命令,但无效: echo "a[test] asdfasdf [sdfsdf]b" | sed -n -e 's/.*\(\[.*\]\).*/\1/p' 这将返回[sdfsdf] 如何取而代之的是[test]?*将选择最长的匹配。改用[^[]*和[^]]* sed -n -e 's/[^[]*\(\[[^]]*\]\)

对于给定的文本,比如

a[测试]asdfasdf[sdfsdf]b

我想要第一个匹配的文本,它位于第一个方括号内(regex=[.*),因此在本例中是
[test]

我尝试了以下命令,但无效:

echo "a[test] asdfasdf [sdfsdf]b" | sed -n -e 's/.*\(\[.*\]\).*/\1/p'
这将返回
[sdfsdf]


如何取而代之的是
[test]

*
将选择最长的匹配。改用
[^[]*
[^]]*

sed -n -e 's/[^[]*\(\[[^]]*\]\).*/\1/p'

@Ram Gaddam:另一种选择是:使用Perl
*?
将选择最短的匹配:
Perl-p-e的/*?\[(.*?\]./\1/'