好吧,我有一个文件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,现在它正常工作.有关详细信息,请参阅此链接.
如果你确定你有没有前导空格,加^仅在一行的开始匹配,并更改*到+,当你有一个或多个字母数字字符仅匹配.(这意味着添加-E使用扩展的正则表达式).
grep -Eo "^[[:alnum:]]+[[:blank:]]" test.txt
Run Code Online (Sandbox Code Playgroud)
(我也.从中间删除了;我不确定那里做了什么?)