2016-07-27 9 views
0

Wenn ich den Inhalt von wpa_passphrase generiert in der Variablen wpa_psk gespeichert habe bekomme ich den Inhalt von psk mit nur bash oder muss ich sed oder etwas ähnliches verwenden?Kann ich den Inhalt dieses Parameters nur mit bash bekommen?

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

Umm ... 'sed' ist bash? – Andrew

+1

@Andrew 'sed' ist ein externer Befehl. – Kusalananda

+0

@Kusalananda Ich weiß, aber ich habe das Gefühl, wenn es etwas ist, das in einem Bash-Skript und dem Terminal verwendet werden kann, warum würdest du es nicht als Bash betrachten? – Andrew

Antwort

1

Sie können wie folgt versuchen:

part=${wpa_passphrase/*psk=/} 
psk=${part/??\}/} 

Zuerst wird man alles entfernen, bevor und psk= einschließlich und die zweite wird, bevor es } und den Raum und Newline entfernen.

1

Ohne externe Befehle, wie gefragt:

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

Diese Schleife Zeilen von der Standardeingabe lesen und teilen Sie sie auf =. Die lhs Variable wird die linke Seite der = bekommen und rhs wird die rechte Seite bekommen.

Wenn $lhspsk ist, drucken wir $rhs auf Standardausgabe und brechen aus der Schleife.

1

Mit sed:

sed -nE 's/^[[:blank:]]+psk=(.*)/\1/p' file.txt 

Beispiel:

$ cat file.txt         
network={ 
    ssid="ssid" 
    psk=13ddde5c993709218f02296c238df70579dc392cc216c02356b483a2c2278187 
} 

$ sed -nE 's/^[[:blank:]]+psk=(.*)/\1/p' file.txt 
13ddde5c993709218f02296c238df70579dc392cc216c02356b483a2c2278187 
Verwandte Themen