Grep返回aces序列而不是我期望的结果

时间:2014-11-11 18:21:37

标签: linux bash shell ubuntu grep

我有一个名为threads.log的文件,这是该文件的一个示例

Threads:    40
Threads:    1
Threads:    1
Threads:    3
Threads:    5
Threads:    5
Threads:    1
Threads:    5
// rest

我在终端这样做: echo $(cat threads.log | grep -o [0-9]*)

这是输出:1 1 1 1 1 1 1而不是预期的数字。为什么会这样?

1 个答案:

答案 0 :(得分:7)

这一行有很多错误(或次优)。

echo $(cat threads.log | grep -o [0-9]*)

包裹echo完全没用(好吧它做了什么,但没什么好处),删除它。

cat threads.log | grep -o [0-9]*

没有必要cat | grep grep直接获取文件。

grep -o [0-9]* threads.log

[0-9]*是一个shell glob。如果你有一个以当前目录中的数字开头的文件,我希望你这样做,那么shell会将[0-9]*展开到匹配文件列表中,而你的grep将不会获得参数你期待。引用模式。

grep -o '[0-9]*' threads.log

当它可以匹配零位数并且不产生输出时。您需要一位或多位数字,因此请使用\+

grep -o '[0-9]\+' threads.log