Momentan schreibe ich ein Shell-Skript für meinen Raspberry Pi, um einen Zugangspunkt mit einer eindeutigen SSID einzurichten. Dazu möchte ich die Mac-Adresse des WLAN-Dongles als meine SSID verwenden. Dafür möchte ich awk verwenden, mit
awk '{ gsub(/:/, ""); print > "file" }' /sys/class/net/wlan0/address
Ich kann die korrekt formatierte Mac-Adresse in eine Datei schreiben, aber wie kann ich sie in eine bestimmte Zeile / Stelle in einer anderen Datei einfügen? Ich habe so etwas im Sinn
awk '{ gsub(/:/, ""); "replace ssid= at /etc/hostapd/hostapd.conf" }' /sys/class/net/wlan0/address
Jede Hilfe und Erklärung für einen Neuling wie mich wird geschätzt.
Meine Eingabedatei sieht folgendermaßen aus:
$ cat /sys/class/net/wlan0/address
01:23:45:67:89:ab
und ich versuche es zu holen und den Wert von zu ersetzen ssid
in der datei was ist wie:
interface=wlan0 driver=nl80211 ssid=7cdd907f6b07 hw_mode=g channel=11 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=1 wpa_passphrase=My_Passphrase wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
shell-script
raspberry-pi
awk
Jabaal
quelle
quelle
7c:dd:90:7f:6b:07
und die erwarteten Ergebnisse sindssid=pi_7cdd907f6b07
innerhalb des/etc/hostapd/hostapd.conf
01:23:45:67:89:ab
? Kannst du einfach benutzengrep
:grep -o ..:..:..:..:..:.. >> file
? Oder ist die Ausgabe eher, dass Sie es an der bestimmten Linie wünschen? Hast duex
in Himbeer-Pi?/etc/hostapd/hostapd.conf
- Ich muss nur die mit ändernssid=some_ssid
- dasgrep
Befehl schreibt nur in eine Datei.Antworten:
Aktueller Rekord Nr. (
NR
) entspricht dem aktuellen Aktenzeichen also nur für die erste datei:
Die Ersetzung wird durchgeführt, anschließend wird die Zeile auf die platziertmacadd
Variable undnext
Überspringt die Zeilenausgabe.Die anderen Anweisungen gelten für die
hostapd.conf
Datei; Finale1
steht für "true", somit werden Zeilen gedruckt.Wenn alles funktioniert, können Sie die Befehlsausgabe in eine neue Datei umleiten und ersetzen
hostapd.conf
.Anmerkungen:
gawk
Ersetzte Funktionen ab 4.1.0quelle
Einmal getestet, können Sie die entfernen
.bak
Teil, der ein Backup von erstellthostapd.conf
. Ich denke, Sie werden auch löschen|tee file
.Das
^
sign in regexps steht für "Zeilenanfang"; dass
Betreiber insed
Ersetzt einen regulären Ausdruck durch eine bestimmte Zeichenfolge. Die hier angegebene Zeichenfolge hat eine Subshell mit dem Namen thru$(...)
, bekommenaddress
Inhalt, löscht es aus:
ist mittr
und Zurücksenden der Ausgabe nach dem Speichern einer Kopie infile
Datei von dertee
Befehl.quelle
awk
Lösung.ssid:=
?^
bedeutet Zeilenanfang;.
bedeutet ein einzelnes Zeichen;a*
bedeutet null oder mehr von a. Probier es aus dich selbst. Übrigens, hast du das verpasst?awk
Lösung Ich habe versucht, aufzuschreiben?Dann laden und speichern Sie es an Ort und Stelle mit
ex
Editor, versuchen Sie:welche:
system("cat file")
das ist äquivalent zureadfile('file')
[0-9a-z]
@m
registrierendann ersetzen auf
hostapd.conf
durch das Findenssid
und ersetzen\{12}
Zeichen von[a-f0-9]
mit Wert vonm
registrieren (\=@m
),Mit anderen Worten:
%s/^key=\zs.\+/new_value/
Speichern Sie dann die Datei an Ort und Stelle (
-cwq
)Um es zu debuggen, können Sie:
+%p
(um es zu drucken) und zu ändern-scwq
in-scq!
für den Trockenlauf (ohne die Datei zu ändern)-V1
für ausführlicherUm nur die MAC-Adresse abzurufen
ifconfig
es ist leicht zu machengrep
, mögen:oder:
quelle