Io-Redirection

如何過濾和重定向輸出

  • September 11, 2020

我有一個命令會產生大量輸出到 STDOUT,我知道可以通過這種方式將其重定向到文件中:

./myCMD 1>tmp

在將輸出重定向到文件之前如何過濾輸出。例如,我只想重定向那些包含一些關鍵字的輸出行。

如果你的意思是你只想要一些行進入tmp文件,而其餘的保持不變:

cmd | awk '/pattern/ {print > "tmp"; next}
          {print}'

或者:

cmd | sed '/pattern/!b
          w tmp
          d'

(一行cmd | sed -e '/pattern/!b' -e 'w tmp' -e d:)

或者:

cmd | sed '/pattern/ {
            w tmp
            d
          }'

(一行cmd | sed -e '/pattern/{w tmp' -e 'd;}':)

注意 forsedpattern一個基本的正則表達式,而 forawk是一個擴展的正則表達式。

您可以使用管道執行此操作:

./myCMD | grep keyword > tmp

這只會將包含“關鍵字”的行寫入tmp文件。

如果您想查看完整的輸出,但只將一個子集記錄到文件中,請添加tee(假設您的 shell 支持程序替換):

./myCMD | tee >(grep keyword > tmp)

引用自:https://unix.stackexchange.com/questions/428695