如何使用一个命令编写两个信息脚本?

如何使用一个命令编写两个信息脚本?

我尝试使用 iwlist 命令在命令行中获取多个信息,例如获取 Mac 地址和 ESSID。我尝试使用

# iwlist wlan0 scan|egrep 'Address|ESSID'

但我不想要所有的行,而只想要结果“例如”

# 00:13:33:83:36:F7
# Essid name

有什么办法可以得到它吗?谢谢。

答案1

你尝试过 awk 吗?

$> iwlist wlan0 scan | egrep 'Address|ESSID' | awk -F : '{ $1="";print}'
  00 24 7E 1F 7B 4D
  "YouShallNotPass!"

使用 -FI 将分隔符改为冒号:,可惜的是,它从地址中取出了其他冒号,这可以通过设置 OFS 来补救,如下所示:

$ iwlist wlan0 scan | grep Add | awk -F : '{OFS=":";$1="";print substr($0, 3) }'
00:24:7E:1F:7B:4D

查看“iwlist ... scan”本身的结果,它们并不总是有规律的。我应该提到你不会通过这种方式得到的另外两行:

  • 质量和信号(没有冒号),改用
    • iwlist wlan0 scan | grep Quality | awk '{print $3}' | awk -F = '{print $2}'用于信号
    • iwlist wlan0 scan | grep Quality | awk '{print $1}' | awk -F = '{print $2}'追求品质
  • 比特率(嗯,在我的例子中,有三行比特率,其中一行没有冒号,只有值 - 显然上面的 Awk 脚本错过了它)。

我不太清楚比特率到底显示什么,所以不知道您的使用情况以及这在许多 WiFi 驱动程序/卡/其他之间是否存在差异,我缺乏可在此处提供帮助的信息。

请注意 - 还有其他选择,但你隐瞒了你需要什么以及为什么这么做,所以我给了你简单的(如果很长)Awk 特定解决方案。可以通过 Perl 正则表达式甚至 Bash 获得相同的信息。

相关内容