如果我在变量wpa_passphrase
中存储了wpa_psk
生成的以下内容,我是否可以仅使用bash获取psk
的内容,还是需要使用sed
或类似的东西?
network={
ssid="ssid"
psk=13ddde5c993709218f02296c238df70579dc392cc216c02356b483a2c2278187
}
答案 0 :(得分:1)
没有外部命令,如下所示:
IFS=$'\n= '
while read -r lhs rhs; do
if [[ "$lhs" == "psk" ]]; then
printf "%s\n" "$rhs"
break
fi
done
此循环将读取标准输入中的行并将其拆分为=
。 lhs
变量将获取=
的左侧,rhs
将获得右侧。
如果$lhs
为psk
,我们会将$rhs
打印到标准输出并突破循环。
答案 1 :(得分:1)
您可以尝试这样:
part=${wpa_passphrase/*psk=/}
psk=${part/??\}/}
首先删除psk=
之前的所有内容,然后第二个删除}
以及之前的空格和换行符。
答案 2 :(得分:1)
使用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