簡體   English   中英

從終端的命令輸出中提取單行

[英]Extract single line from command output in terminal

我想從我正在處理的某些日志記錄腳本的perf stat輸出中提取包含“ seconds time經過時間”輸出的行。

我不想將輸出寫入文件,然后搜索該文件。 我想用'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% )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM