sed匹配多个匹配中的第一个模式
对于给定的文本,比如 a[测试]asdfasdf[sdfsdf]b 我想要第一个匹配的文本,它位于第一个方括号内(regex=[.*),因此在本例中是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/[^[]*\(\[[^]]*\]\)
[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/'