【问题标题】:sed to match first pattern among multiple matchessed 匹配多个匹配项中的第一个模式
【发布时间】:2020-08-04 15:25:02
【问题描述】:

所以对于像

这样的给定文本

a[测试] asdfasdf [sdfsdf]b

我想要第一个方括号内的文本的第一个匹配项 (regex = [.*]),所以在本例中为 [test]

我试过下面的命令还是不行:

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

这是返回[sdfsdf]

我如何获得[test]

【问题讨论】:

    标签: sed non-greedy


    【解决方案1】:

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

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

    【讨论】:

    • @Ram Gaddam:作为替代方案:使用 Perl .*? 将选择最短匹配:perl -p -e 's/.*?\[(.*?)\].*/\1/'
    猜你喜欢
    • 2015-05-07
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2018-12-18
    • 2021-04-02
    相关资源
    最近更新 更多