使用 sed 捕获第一个大写字母的单词

Using sed to capture the first word with capital letters

我有兴趣检索句子中以 5 个大写字母开头的第一个单词。比如一个句子是SOLAR eclipse,我需要SOLAR。如果句子是 SOLA eclipsesolar ECLIPSE40 thieves,则什么都没有。

printf "SOLAR eclipse\nSOLA eclipse\nsolar ECLIPSE\n40 thieves" | sed 's/\(^[A-Z]\{5\}\).*//'
SOLAR
SOLA eclipse
solar ECLIPSE
40 thieves

正如我们所见,提取仅适用于第一句话。我原以为第二个、第三个和第四个会 return 空字符串,但 return 是整个字符串。

使用 grep

$printf  "SOLAR eclipse\nSOLA eclipse\nsolar ECLIPSE\n40 thieves" | grep -oE  '^[A-Z]{5}'
SOLAR
$

有了awk你也可以尝试关注一下吗

printf "SOLAR eclipse\nSOLA eclipse\nsolar ECLIPSE\n40 thieves" |
awk 'match([=10=],/^[A-Z]{5}/){print substr([=10=],RSTART,RLENGTH)}'