从终端的命令输出中提取单行
Extract single line from command output in terminal
我想从我正在处理的一些日志记录脚本的 perf stat 输出中提取包含 'seconds time elapsed' 输出的行。
我不想将输出写入文件然后搜索文件。我想用 'grep' 或类似的东西来做。
这是我尝试过的:
perf stat -r 10 echo "Sample_String" | grep -eE "seconds time elapsed"
为此我得到
grep: seconds time elapsed: No such file or directory
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
Performance counter stats for 'echo Sample_String' (10 runs):
0.254533 task-clock (msec) # 0.556 CPUs utilized ( +- 0.98% )
0 context-switches # 0.000 K/sec
0 cpu-migrations # 0.000 K/sec
56 page-faults # 0.220 M/sec ( +- 0.53% )
<not supported> cycles
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
<not supported> instructions
<not supported> branches
<not supported> branch-misses
0.000457686 seconds time elapsed ( +- 1.08% )
我试过了
perf stat -r 10 echo "Sample_String" > grep -eE "seconds time elapsed"
为此我得到了
Performance counter stats for 'echo Sample_String -eE seconds time elapsed' (10 runs):
0.262585 task-clock (msec) # 0.576 CPUs utilized ( +- 1.11% )
0 context-switches # 0.000 K/sec
0 cpu-migrations # 0.000 K/sec
56 page-faults # 0.214 M/sec ( +- 0.36% )
<not supported> cycles
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
<not supported> instructions
<not supported> branches
<not supported> branch-misses
0.000456035 seconds time elapsed ( +- 1.05% )
我是 grep、awk 和 sed 等工具的新手。我希望有人能帮助我。我也不想将输出写入文件然后搜索文件。
这里的问题是你想要的输出被发送到 stderr
而不是标准输出。
您可以通过将 stderr 重定向到 /dev/null 来查看这一点,并且您会看到唯一剩下的结果是来自 "echo" 命令的结果。
~/ perf stat -r 10 echo "Sample_String" 2>/dev/null
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
为了做你想做的事,你必须将perf
的stderr重定向到标准输出,并隐藏标准输出。这样,perf
的输出将被发送到 grep
命令。
~/ perf stat -r 10 echo "Sample_String" 2>&1 >/dev/null | grep 'seconds time elapsed'
0,013137361 seconds time elapsed ( +- 96,08% )
看起来你想要的输出是 stderr
。尝试:
perf stat -r 10 echo "Sample_String" 2>&1 | grep "seconds time elapsed"
这可以按照您的预期工作:
grep -e "seconds time elapsed" <<< "$(perf stat -r 10 echo "Sample_String" 2>&1 >/dev/null)"
输出:
0.000544399 seconds time elapsed ( +- 2.05% )
我想从我正在处理的一些日志记录脚本的 perf stat 输出中提取包含 'seconds time elapsed' 输出的行。
我不想将输出写入文件然后搜索文件。我想用 'grep' 或类似的东西来做。
这是我尝试过的:
perf stat -r 10 echo "Sample_String" | grep -eE "seconds time elapsed"
为此我得到
grep: seconds time elapsed: No such file or directory
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
echo: Broken pipe
Performance counter stats for 'echo Sample_String' (10 runs):
0.254533 task-clock (msec) # 0.556 CPUs utilized ( +- 0.98% )
0 context-switches # 0.000 K/sec
0 cpu-migrations # 0.000 K/sec
56 page-faults # 0.220 M/sec ( +- 0.53% )
<not supported> cycles
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
<not supported> instructions
<not supported> branches
<not supported> branch-misses
0.000457686 seconds time elapsed ( +- 1.08% )
我试过了
perf stat -r 10 echo "Sample_String" > grep -eE "seconds time elapsed"
为此我得到了
Performance counter stats for 'echo Sample_String -eE seconds time elapsed' (10 runs):
0.262585 task-clock (msec) # 0.576 CPUs utilized ( +- 1.11% )
0 context-switches # 0.000 K/sec
0 cpu-migrations # 0.000 K/sec
56 page-faults # 0.214 M/sec ( +- 0.36% )
<not supported> cycles
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
<not supported> instructions
<not supported> branches
<not supported> branch-misses
0.000456035 seconds time elapsed ( +- 1.05% )
我是 grep、awk 和 sed 等工具的新手。我希望有人能帮助我。我也不想将输出写入文件然后搜索文件。
这里的问题是你想要的输出被发送到 stderr
而不是标准输出。
您可以通过将 stderr 重定向到 /dev/null 来查看这一点,并且您会看到唯一剩下的结果是来自 "echo" 命令的结果。
~/ perf stat -r 10 echo "Sample_String" 2>/dev/null
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
Sample_String
为了做你想做的事,你必须将perf
的stderr重定向到标准输出,并隐藏标准输出。这样,perf
的输出将被发送到 grep
命令。
~/ perf stat -r 10 echo "Sample_String" 2>&1 >/dev/null | grep 'seconds time elapsed'
0,013137361 seconds time elapsed ( +- 96,08% )
看起来你想要的输出是 stderr
。尝试:
perf stat -r 10 echo "Sample_String" 2>&1 | grep "seconds time elapsed"
这可以按照您的预期工作:
grep -e "seconds time elapsed" <<< "$(perf stat -r 10 echo "Sample_String" 2>&1 >/dev/null)"
输出:
0.000544399 seconds time elapsed ( +- 2.05% )