Использование первого примера файла из https://www.systutorials.com/docs/linux/man/5-wpa_supplicant.conf/:
$ cat file
# allow frontend (e.g., wpa_cli) to be used by all users in 'wheel' group
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
#
# home network; allow all valid ciphers
network={
ssid="home"
scan_ssid=1
key_mgmt=WPA-PSK
psk="very secret passphrase"
}
#
# work network; use EAP-TLS with WPA; allow only CCMP and TKIP ciphers
network={
ssid="work"
scan_ssid=1
key_mgmt=WPA-EAP
pairwise=CCMP TKIP
group=CCMP TKIP
eap=TLS
identity="user [at] example.com"
ca_cert="/etc/cert/ca.pem"
client_cert="/etc/cert/user.pem"
private_key="/etc/cert/user.prv"
private_key_passwd="password"
}
Вот как найти тег с заданным значением и распечатать значение другого тега с помощью стандартного инструмента UNIX:
$ cat tst.awk
{ gsub(/^[[:space:]]+|[[:space:]]+$/,"") }
/^network[[:space:]]*=/ {
inNw = 1
next
}
inNw {
if ( /^[[:alnum:]_]+[[:space:]]*=/ ) {
tag = val = $0
sub(/[[:space:]]*=.*/,"",tag)
sub(/[^=]+=[[:space:]]*/,"",val)
f[tag] = val
}
else if ( /^}/ ) {
if ( ( f[fndTag] == fndVal ) ||
( f[fndTag] == "\"" fndVal "\"" ) ) {
print f[prtTag]
}
delete f
inNw = 0
}
}
.
$ awk -v fndTag='ssid' -v fndVal='home' -v prtTag='psk' -f tst.awk file
"very secret passphrase"
$ awk -v fndTag='ssid' -v fndVal='work' -v prtTag='key_mgmt' -f tst.awk file
WPA-EAP
$ awk -v fndTag='key_mgmt' -v fndVal='WPA-EAP' -v prtTag='identity' -f tst.awk file
"user [at] example.com"
Вышеописанное будет работать при использовании любого awk в любой оболочке на любом компьютере UNIX.