linux - 使用 BASH 脚本抓取并封装文本

标签 linux bash

我正在使用 bash 制作一个脚本,它从 iwconfig 中获取文本并将它们存储在变量中。这是我到目前为止所拥有的:

 DEVICE_ESSID=iwconfig wlan0 | grep -e "ESSID:" | awk '{print $2}'
 DEVICE_IEEE=iwconfig wlan0 | grep -e "ESSID" | awk '{$3}'
 DEVICE_SIGNAL= ``
 DEVICE_FREQ=``
 DEVICE_MAC=``
 timestamp=$(date +%s%N)

我需要捕获:

      Mode:Managed  Frequency:2.427 GHz  Access Point: A4:2B:B0:EB:8D:E2
      Bit Rate=72.2 Mb/s   Tx-Power=31 dBm

谢谢!

最佳答案

要在变量中捕获命令的输出,您可以使用

DEVICE_ESSID=$(iwconfig wlan0 | grep -e "ESSID:" | awk '{print $2}')

请注意捕获命令输出的 $(...) 语法。

现在让我们假设您有如下所示的 iwconfig wlan0 输出:

wlan0     IEEE 802.11  ESSID:"my-ssid"  
          Mode:Managed  Frequency:2.437 GHz  Access Point: 25:D3:57:A8:F4:35   
          Bit Rate=72.2 Mb/s   Tx-Power=16 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=55/70  Signal level=-55 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:21  Invalid misc:12203   Missed beacon:0

解析可能会有点难看,但有很多方法可以做到这一点。如果您知道自己在做什么(我不知道),awk 会很有帮助且功能强大。我也不确定 iwconfig 的输出有多稳定以及应该如何推荐这种方法。

DEVICE_ESSID=$(iwconfig wlan0 | awk '/ESSID:/ { print $4 }' | sed 's/ESSID:"\(.*\)"/\1/')
DEVICE_IEEE=$(iwconfig wlan0 | awk '/ESSID:/ { print $3 }')
DEVICE_SIGNAL=$(iwconfig wlan0 | awk '/Signal level/ { print $4 }' | awk -F= '{print $2}')
DEVICE_FREQ=$(iwconfig wlan0 | awk '/Frequency/ { print $2 }' | awk -F: '{print $2}')
DEVICE_MAC=$(iwconfig wlan0 | awk '/Access Point/ { print $6 }')

关于linux - 使用 BASH 脚本抓取并封装文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50454669/

相关文章:

bash - 意外 token “0”附近的语法错误

python - 如何在不使用 aptitude 或 apt-get 的情况下在 linux 中安装 lxml

linux - 使用一个 bash 脚本动态生成另一个 bash 脚本并运行它

linux - SSH 登录权限被拒绝

c - Tee - 模仿程序只将初始输入写入文件,忽略所有顺序输入

linux - bash:xargs 传递变量

c - 为什么缓存不能正常工作?

linux - 在终端顶部显示实时时间

bash 扩展一个变量的值以在另一个变量中使用

c++ - 命令行实用程序可以比 C++ 更快吗?