我可以使用bash获取此参数的内容吗?

时间:2016-07-27 19:03:55

标签: regex bash

如果我在变量wpa_passphrase中存储了wpa_psk生成的以下内容,我是否可以仅使用bash获取psk的内容,还是需要使用sed或类似的东西?

network={ 
    ssid="ssid" 
    psk=13ddde5c993709218f02296c238df70579dc392cc216c02356b483a2c2278187 
}

3 个答案:

答案 0 :(得分:1)

没有外部命令,如下所示:

IFS=$'\n= '
while read -r lhs rhs; do
    if [[ "$lhs" == "psk" ]]; then
        printf "%s\n" "$rhs"
        break
    fi
done

此循环将读取标准输入中的行并将其拆分为=lhs变量将获取=的左侧,rhs将获得右侧。

如果$lhspsk,我们会将$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