如果我从wpa_passphrase
生成的内容存储在变量wpa_psk
中,我可以使用bash获得psk
的内容,还是需要使用sed
或类似的东西?我可以使用bash获取此参数的内容吗?
network={
ssid="ssid"
psk=13ddde5c993709218f02296c238df70579dc392cc216c02356b483a2c2278187
}
如果我从wpa_passphrase
生成的内容存储在变量wpa_psk
中,我可以使用bash获得psk
的内容,还是需要使用sed
或类似的东西?我可以使用bash获取此参数的内容吗?
network={
ssid="ssid"
psk=13ddde5c993709218f02296c238df70579dc392cc216c02356b483a2c2278187
}
你可以尝试这样的:与包括psk=
前
part=${wpa_passphrase/*psk=/}
psk=${part/??\}/}
第一个将删除一切,第二个将删除}
之前它的空间和换行符。
无需外部命令,要求:
IFS=$'\n= '
while read -r lhs rhs; do
if [[ "$lhs" == "psk" ]]; then
printf "%s\n" "$rhs"
break
fi
done
这个循环会从标准输入读取行,并将它们拆分上=
。变量lhs
将得到=
的左侧,rhs
将得到右侧。
如果$lhs
是psk
我们打印$rhs
到标准输出并跳出循环。
随着sed
:
sed -nE 's/^[[:blank:]]+psk=(.*)/\1/p' file.txt
例子:
$ cat file.txt
network={
ssid="ssid"
psk=13ddde5c993709218f02296c238df70579dc392cc216c02356b483a2c2278187
}
$ sed -nE 's/^[[:blank:]]+psk=(.*)/\1/p' file.txt
13ddde5c993709218f02296c238df70579dc392cc216c02356b483a2c2278187
嗯...'sed'是bash的? – Andrew
@Andrew'sed'是一个外部命令。 – Kusalananda
@Kusalananda我知道,但我觉得如果它的东西可以在bash脚本和终端中使用,你为什么会认为它不是bash? – Andrew