grep -v は iwconfig でパイプする場合は動作しませんが、ファイルの cat でパイプする場合は動作します。

grep -v は iwconfig でパイプする場合は動作しませんが、ファイルの cat でパイプする場合は動作します。

実行中ですが、iwconfig | grep -v "no wireless extensions"-v オプションが期待どおりに機能することはできません。 「ワイヤレス拡張なし」を含む行を除外したいです。つまり、アクティブ/アクティブなワイヤレスインターフェイス、または呼び出す必要がある項目のみを表示したいと思います。

最初は、コマンドが出力するストリームがgrepにパイプされるストリームと異なる場合があると考えてcat myFile | grep -v myExclusionPattern。これは期待どおりに機能するため、-v期待どおりに機能すると結論付けられます。その後iwconfig | grep "no wireless extensions"再試行し、結果が予想された。つまり、iwconfigの出力はgrepにパイプされています。だから-viwconfiggrep

これは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.grepcat
  2. iwconfigの出力をパイピングするとき(1)と同じ動作を再現できませんgrep

grep -vで次の質問を読んでいますが、それらのどれも上記の質問に対する答えを見つけることができませんでした。

ベストアンサー1

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.

おすすめ記事