我正在运行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
总结:
grep -v
当我通过管道输出grep
带有cat
.iwconfig
当通过管道传输to的输出时,我无法重现与 (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.
答案2
我看到没有人提到这种替代方案,但我会考虑使用
iwconfig 2>&1 | grep -v "no wireless extensions"
也是一个解决方案(也许更优雅?)
现在,错误和常规输出都被发送到相同的文件描述符(标准输出),这就是通过管道传输到 grep 的内容,它最终可以过滤整个数据。