Grep

grep -v 從 iwconfig 管道時不起作用,但在文件上從 cat 管道時起作用

  • August 5, 2021

我正在執行iwconfig | grep -v "no wireless extensions",但無法讓 -v 選項按預期工作。我想排除包括“無無線擴展”在內的行,即,我只想顯示活動/工作的無線介面或應該呼叫的任何內容。

一開始我以為命令輸出到的流可能與通過管道傳輸到 grep 的流不同,所以我嘗試了cat myFile | grep -v myExclusionPattern. 這按預期工作,所以我得出結論-v做我期望它做的事情。然後我再次嘗試iwconfig | grep "no wireless extensions",結果是預期的 - 這意味著 iwconfig 的輸出是通過管道傳輸到 grep 的。所以我留下了一個問題,為什麼在傳遞 to-v的結果時具體不起作用。iwconfig``grep

這是我對 iwconfig 的輸出:

enp4s0    no wireless extensions.

docker0   no wireless extensions.

lo        no wireless extensions.

wlp5s0    IEEE 802.11  ESSID:"myEssid"  
         Mode:Managed  Frequency:5.24 GHz  Access Point: 74:83:C2:75:86:2A   
         Bit Rate=6 Mb/s   Tx-Power=30 dBm   
         Retry short limit:7   RTS thr:off   Fragment thr:off
         Power Management:on
         Link Quality=59/70  Signal level=-51 dBm  
         Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
         Tx excessive retries:0  Invalid misc:747   Missed beacon:0

總結:

  1. grep -v當我通過管道傳輸到grep帶有cat.
  2. iwconfig將to的輸出通過管道傳輸時,我無法重現與 (1) 中相同的行為grep

我在 grep -v 上閱讀了以下問題,但無法在其中任何一個中找到上述問題的答案:

iwconfig輸出到標準輸出和標準錯誤,這取決於它是否找到了介面的任何無線擴展。管道僅影響標準輸出。

刪除發送到標準錯誤流的輸出的範例(僅顯示具有無線擴展的介面):

$ /usr/sbin/iwconfig 2>/dev/null
wlp4s0    IEEE 802.11  ESSID:off/any
         Mode:Managed  Access Point: Not-Associated   Tx-Power=22 dBm
         Retry short limit:7   RTS thr:off   Fragment thr:off
         Power Management:on

刪除發送到標準輸出流的輸出範例(僅顯示iwconfig未能找到無線擴展的介面):

$ /usr/sbin/iwconfig >/dev/null
lo        no wireless extensions.

enp0s31f6  no wireless extensions.

wwan0     no wireless extensions.

docker0   no wireless extensions.

br-ca679f9ee354  no wireless extensions.

veth232fd86  no wireless extensions.

vboxnet0  no wireless extensions.

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