使用 time ls
,我有以下输出:
$ time ls -l
total 2
-rwx------+ 1 FRIENDS None 97 Jun 23 08:59 location.txt
-rw-r--r--+ 1 FRIENDS None 10 Jun 23 09:06 welcome
real 0m0.040s
user 0m0.000s
sys 0m0.031s
现在,当我尝试 grep
仅 real 值行时,实际结果是:
$ time ls -l | grep real
real 0m0.040s
user 0m0.000s
sys 0m0.031s
我的问题是,如何只获得真正的值(value)作为输出?在这种情况下,0m0.040s
.
最佳答案
time
将其输出写入stderr,因此您需要通过管道传输stderr 而不是stdout。但同样重要的是要记住 time
是 bash 语法的一部分,它对整个管道进行计时。因此,您需要将管道包裹在大括号中,或者在子 shell 中运行:
$ { time ls -l >/dev/null; } 2>&1 | grep real
real 0m0.005s
使用 Bash v4.0(可能在 Linux 发行版上通用,但在 Mac OS X 上仍不是标准),您可以使用 |&
来管道 stdout
和 stderr
:
{ time ls -l >/dev/null; } |& grep real
或者,您可以使用 time
实用程序,它可以控制输出格式。在我的系统上,该实用程序位于 /usr/bin/time
:
/usr/bin/time -f%e ls -l >/dev/null
man time
了解有关 time
实用程序的更多详细信息。
关于linux - grep 时间命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257724/