.cfg Datei Analysieren und Zeilen Stellenweise abändern

SchorschM

Grünschnabel
Beiträge
4
Hallo allesamt :)

ich hab ein kleines Problem.
Ich will mittels eines Shell Skriptes in einer Datei die Namensgebung einiger Geräte ändern.
Ich habe z.B. zwei Geräte vom Model model HM-SEC-WDS mit der ID 1E4D68 und model HM-SEC-SC mit der ID 1A05AE.
Jetzt möchte ich in jeder Zeile alle Vorkommnise des Strings CUL_HM_threeStateSensor_1E4D68 in CUL_HM_HM-SEC-WDS_1E4D68 umbenennen
und in jeder Zeile alle Vorkommnise des Strings von CUL_HM_threeStateSensor_1A05AE in CUL_HM_HM-SEC-SC_1A05AE umbenennen.
Natürlich sollte das ganze variable sein. So könnte statt threeStateSensor auch thermostat und blablabla dastehen ^^
Der Beginn jedes Ausdrucks CUL_HM ist fest.

Ich muss also zuerst nach mode suchen und anhand dieser Zeile die ID bestimmen. Anschließend müsste ich alle Zeilen in denen diese ID vorkommt
umändern. Gespeichert werden soll in das gleiche File.
Nur nach der ID suchen geht nicht. Diese wird dynamisch angelegt und ich habe nicht immer Einsicht in das File.
Hat jemand eine Idee wie ich das bewerkstelligen kann? Hab mit Shell noch relativ wenig Erfahrung.

Hoffe ich konnte das Problem halbwegs logich erklären.

Gruß schorsch


Auszug der config Datei. Diese umfasst in echt mehrere hundert Zeilen Code.
Code:
define CUL_HM_threeStateSensor_1E4D68 CUL_HM 1E4D68
attr CUL_HM_[COLOR=#0000ff]threeStateSensor_1E4D68[/COLOR] .devInfo 110101
attr CUL_HM_threeStateSensor_1E4D68 .stc 80
attr CUL_HM_threeStateSensor_1E4D68 actCycle 028:00
attr CUL_HM_threeStateSensor_1E4D68 actStatus unknown
attr CUL_HM_threeStateSensor_1E4D68 expert 2_full
attr CUL_HM_threeStateSensor_1E4D68 firmware 1.1
attr CUL_HM_threeStateSensor_1E4D68 [COLOR=#ff0000]model HM-SEC-WDS[/COLOR]
attr CUL_HM_threeStateSensor_1E4D68 peerIDs
attr CUL_HM_threeStateSensor_1E4D68 room CUL_HM
attr CUL_HM_threeStateSensor_1E4D68 serialNr JEQ0714363
attr CUL_HM_threeStateSensor_1E4D68 subType threeStateSensor
define FileLog_CUL_HM_threeStateSensor_1E4D68 FileLog /var/log/fhem/CUL_HM_threeStateSensor_1E4D68-%Y.log CUL_HM_threeStateSensor_1E4D68
attr FileLog_CUL_HM_threeStateSensor_1E4D68 logtype text
attr FileLog_CUL_HM_threeStateSensor_1E4D68 room CUL_HM
define AASendToCommandServerSwitchSensor notify (CUL_HM_remote.*.Btn1.*|CUL_HM_motionDetector.*.motion.*.on.*|EnO_switch.*.channel.*|EnO_switch.*.buttons.*|EnO_sensor.*.motion.*.on.*) { my $ret = sendCommandToServer("%EVENT", "%NAME", "%TYPE");; return $ret;; }
attr AASendToCommandServerSwitchSensor forwardReturnValue 1
define AEventToCommandServerSwitchSensor notify (CUL_HM_motionDetector.*.motion.*.on.*|CUL_HM_threeStateSensor.*.wet|CUL_HM_threeStateSensor.*.damp|CUL_HM_smokeDetector.*.smoke-Alarm) { my $ret = sendEventToServer("%EVENT", "%NAME", "%TYPE");; return $ret;; }
define CUL_HM_threeStateSensor_1A05AE CUL_HM 1A05AE
attr CUL_HM_[COLOR=#0000ff]threeStateSensor_1A05AE[/COLOR] .devInfo 810101
attr CUL_HM_threeStateSensor_1A05AE .stc 80
attr CUL_HM_threeStateSensor_1A05AE actCycle 028:00
attr CUL_HM_threeStateSensor_1A05AE actStatus alive
attr CUL_HM_threeStateSensor_1A05AE firmware 2.0
attr CUL_HM_threeStateSensor_1A05AE [COLOR=#ff0000]model HM-SEC-SC[/COLOR]
attr CUL_HM_threeStateSensor_1A05AE room CUL_HM
attr CUL_HM_threeStateSensor_1A05AE serialNr JEQ0069793
attr CUL_HM_threeStateSensor_1A05AE subType threeStateSensor
define FileLog_CUL_HM_threeStateSensor_1A05AE FileLog /var/log/fhem/CUL_HM_threeStateSensor_1A05AE-%Y.log CUL_HM_threeStateSensor_1A05AE
attr FileLog_CUL_HM_threeStateSensor_1A05AE logtype text
attr FileLog_CUL_HM_threeStateSensor_1A05AE room CUL_HM
 
Zuletzt bearbeitet:

SchorschM

Grünschnabel
Beiträge
4
Hi, hab es nach etwas Hilfe von einem Kolegen heute hinbekommen :)

Code:
##########################################################
echo "Ersetzen des Ausdrucks threeStateSensor durch HM_SEC_SC"

ID1=`awk 'BEGIN {FS="_| "} $0~/HM-SEC-SC$/ {print $5}' /etc/fhem.cfg`
echo $ID1
sed -e "s/\(threeStateSensor\)_\($ID1\)/\HM_SEC_SC_\2/g" -i /etc/fhem.cfg

##########################################################
echo "Ersetzen des Ausdrucks threeStateSensor durch HM_SEC_WDS"

ID2=`awk 'BEGIN {FS="_| "}  $0~/HM-SEC-WDS$/ {print $5}' /etc/fhem.cfg`
echo $ID2
sed -e "s/\(threeStateSensor\)_\($ID2\)/\HM_SEC_WDS_\2/g" -i /etc/fhem.cfg
 

Ähnliche Themen

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

Ubuntu X / dbus problem

wpa_supplicant PEAP problem

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

ATI-fglrx unter Ubuntu Hardy - Logoff Issue

Oben