gpt4 book ai didi

regex - 从脚本更改 WiFi WPA2 key

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:20 25 4
gpt4 key购买 nike

我正在使用 Raspbian Wheezy,但这不是 Raspberry Pi 特定问题。

我正在开发一个 C 应用程序,它允许用户更改其 WiFi 密码。

我没有为此找到现成的脚本/命令,因此我尝试使用sed

我将 SSID 名称和新 key 传递给 bash 脚本,并且该 key 将替换为 *etc/wpa_supplicant/wpa_supplicant.conf.* 中的该 ssid block 。

我的应用程序以 root 身份运行。

下面显示了一个示例 block 。

    network={
ssid="MY_SSID"
scan_ssid=1
psk="my_ssid_psk"
}

到目前为止,我已经尝试了以下操作(我已将 wpa_supplicant.conf 复制到 wpa.txt 进行尝试):

(1) 这会尝试在一个范围之间进行替换,从检测到我的 SSID 时开始,到右大括号后跟换行符时结束。

SSID="TRIMURTI"
PSK="12345678"

sed -n "1 !H;1 h;$ {x;/ssid=\"${SSID}\"/,/}\n/ s/[[:space:]]*psk=.*\n/\n psk=\"${PSK}\"\n/p;}" wpa.txt

(2) 这会尝试“记住”匹配的模式,并在输出中重现它,但使用新 key 。

SSID="TRIMURTI"
PSK="12345678"

sed -n "1 !H; 1 h;$ {x;s/\(ssid=\"${SSID}\".*psk=\).*\n/\1\"${PSK}\"/p;}" wpa.txt

我使用了保持和模式缓冲区,因为模式可以跨越多行。

上面,第一个示例似乎忽略了范围并替换了第一个实例,然后截断了文件的其余部分。

第二个示例替换最后找到的 psk 值并截断此后的文件。

所以我需要帮助来纠正上述代码,或尝试不同的解决方案。

最佳答案

如果我们可以假设字段始终按照严格的顺序排列,其中 ssid= 位于 psk= 之前,那么您真正需要的是

 sed "/^[[:space:]]*ssid=\"$SSID\"[[:space:]]*$/,/}/s/^\([[:space:]]*psk=\"\)[^\"]*/\1$PSK/" wpa.txt

不过,这相当脆弱。如果输入格式错误,或者 ssid 出现在 block 中的 psk 之后,它将中断。正确的解决方案(然而在这种情况下是严重的矫枉过正)是为输入格式提供适当的解析器;虽然理论上这在 sed 中是可能的,但如果您要切换 Python 或 Perl 甚至 Awk 等高级语言,事情会简单得多。

关于regex - 从脚本更改 WiFi WPA2 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22215830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com