sed 表达式提取第一个匹配的组

sed 表达式提取第一个匹配的组

我有以下文字:

somegarbageSTARTfirstgroupENDsomeendgarbage
someohtergarbageSTARTsecondgroupENDsomeotherendgarbage
...

我想firstgroup使用 sed 提取。

我尝试过sed -nr 's/.*START(.*)END.*/\1/p',但它不起作用,它提取所有匹配项而不仅仅是第一个匹配项。

答案1

sed -nr '/.*START(.*)END.*/{s/.*START(.*)END.*/\1/p;q}'
# or (probably faster)
sed -nr 's/.*START(.*)END.*/\1/p; t quit; b end; : quit; q; : end;'

答案2

与GNUSTART...END,假设每行最多有一个:

grep -oPm1 'START\K.*?(?=END)' file

END,假设第一次出现在第一行,并且第一个出现之前没有出现并且要返回的值中START没有:START

awk -F'START|END' '{print $2;exit}' file

或者

awk -F'START|END' '$0 ~ FS {print $2;exit}' file

perl -lne 'do{ print $1; last } if /START(.*?)END/' file

输出

firstgroup

相关内容