如何让grep在第一场比赛中停止?

And*_*sne 10 grep

好吧,我有一个文件test.txt

#test.txt
odsdsdoddf112 test1_for_grep
dad23392eeedJ test2 for grep
Hello World test
garbage

我想提取后面有空格的字符串.我使用了以下表达式并且它有效

grep -o  [[:alnum:]]*.[[:blank:]]  test.txt

它的输出是

odsdsdoddf112
dad23392eeedJ 
test2 
for    
Hello 
World

但问题是grep会打印出所有带有空格的字符串,我希望它在第一次匹配后停止,然后进入第二行.

我应该在这里使用哪个表达式,以便在第一次匹配后停止并移至下一行?

这个问题可以通过gawk或其他工具解决,但我将欣赏一个仅使用grep的解决方案.

编辑 我在Linux系统上使用GNU grep 2.5.1,如果这是相关的.

编辑

在下面给出的答案的帮助下,我试着运气

grep  -o   ^[[:alnum:]]*  test.txt
grep  -Eo  ^[[:alnum:]]+  test.txt

两个人都给了我正确的答案.

现在令我惊讶的是我尝试过使用

grep -Eo "^[[:alnum:]]+[[:blank:]]" test.txt

正如这里建议但没有得到正确的答案.这是我终端上的输出

odsdsdoddf112
dad23392eeedJ 
test2 
for    
Hello 
World

但RichieHindle和Adrian Pronk的评论显示他们的系统输出正确.任何人都知道为什么我也没有在我的系统上得到相同的结果.任何的想法?任何帮助将不胜感激.

编辑

好吧,似乎grep 2.5.1有一些bug,因为我的输出不正确.我安装了grep 2.5.4,现在它正常工作.有关详细信息,请参阅此链接.

Ric*_*dle 8

如果你确定你有没有前导空格,加^仅在一行的开始匹配,并更改*+,当你有一个或多个字母数字字符仅匹配.(这意味着添加-E使用扩展的正则表达式).

grep -Eo "^[[:alnum:]]+[[:blank:]]" test.txt
Run Code Online (Sandbox Code Playgroud)

(我也.从中间删除了;我不确定那里做了什么?)