Beiträge: 6.606
Themen: 338
Registriert seit: Jan 2007
Bewertung:
201
Hallo Zusammen,
wer hat eine idee, wie ich aus einem bash-Script parameter in einer xml-datei ändern kann?
Konkret geht es um die /home/easyvdr/.xbmc/ /guisettings.xml,
im Bereich audiooutput liegen die Parameter
Code: <audiooutput>
<ac3passthrough>false</ac3passthrough>
<audiodevice>alsa:default</audiodevice>
<channellayout>0</channellayout>
<customdevice></customdevice>
<custompassthrough></custompassthrough>
<dontnormalizelevels>true</dontnormalizelevels>
<dtspassthrough>false</dtspassthrough>
<mode>0</mode>
<passthroughaac>false</passthroughaac>
<passthroughdevice></passthroughdevice>
<passthroughmp1>false</passthroughmp1>
<passthroughmp2>false</passthroughmp2>
<passthroughmp3>false</passthroughmp3>
</audiooutput>
aber z.B. mode kommt mehrfach in der guisettings.xml vor.
Wer kann hier helfen?
Danke im Voraus
Michel
Produktiv-VDR:
msi K9N2G-Neo (nvidia 8200 onBoard) mit Athlon X2 4850e mit SamuraiZZ
2xNova-HDS2, DH102
Beiträge: 7.041
Themen: 392
Registriert seit: Oct 2008
Bewertung:
216
Hi Michel
..Ich mache das bei den FB´s ja auch
Was muss den da konkret gemacht werden?
Muss jetzt zur S-Bahn -- ... bis nachher
Captain_Beefheart
pille: (vdr1)
Anubis TYPHOON DVB-T Light;Terratec Cinergy1200; GA-M56S-S3; AMD X2 3800(35W); 2x1GB, PCIe 9500GT/LE-40M86BD; Hitachi 320GB; IDE DVD; OCZ 32GB SSD; Trust C-5250/opt./Denon-AV; lirc/DVICO/MD81035; USB-HD 256GB & 1TB ; GraphTFT/LCD 15"; easyVDR 1.0
chekov: (vdr2)
Esprimo5600/1,5GB/AMD Athlon64 X2 3800+; Club-3D GS8400 512MB/G98/19"CRT;Nova T-500; OCZ 32GB SSD, IDE DVD-Rom; lirc/DVICO/MD82467; easyvdr1.0
[color=#00008B]scotty: (work - no vdr)
GA-M52L-S3; AMD X4; 4x1GB, NVidia 9800GT/1GByte; Hitachi 320GB;60GByte SSD; 80GByte Hd for wine; SATA DVD; Trust C-5250;Kubuntu 12.10; Netz: Intel GBit PCIe cardt + ...
Beiträge: 6.606
Themen: 338
Registriert seit: Jan 2007
Bewertung:
201
Hi Matthias,
(07.12.2012, 19:31)Captain_Beefheart link schrieb: Was muss den da konkret gemacht werden? - <custompassthrough> StringAusScript</custompassthrough>
- <passthroughdevice> StringAusScript</passthroughdevice>
- <ac3passthrough> false/true</ac3passthrough>
- <channellayout> StringAusScript</channellayout>
und hier weiß ich noch nicht, ob das OK ist oder angepasst werden muss:
- <audiodevice>alsa:default</audiodevice>
- <customdevice></customdevice>
- <mode>0</mode>
Also zusammenfassend, müssen im script bestimmte (zusammengesetzte) Strings eingetragen werden, wobei teilweise auch bestehende Werte überschrieben werden müssen.
WorstCase dürfte ein der Sring für <custompassthrough> sein, da muss so etwas wie
Code: hdmi:CARD=NVidia,DevNo:7,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2
hinein
Danke im Voraus
Michel
Produktiv-VDR:
msi K9N2G-Neo (nvidia 8200 onBoard) mit Athlon X2 4850e mit SamuraiZZ
2xNova-HDS2, DH102
Beiträge: 7.041
Themen: 392
Registriert seit: Oct 2008
Bewertung:
216
07.12.2012, 23:00
(Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2012, 23:04 von Captain_Beefheart.)
Hi
ersmal auf die schnelle - nur als Darstellung ( syntax is noch mega faul!! )
patcher()
{
Dateiname="guisettings.xml"
parameter1=$1 ## z.B. <custompassthrough>
parameter2=$2 ## z.B "hdmi:CARD=NVidia,DevNo:7,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2"
parameter3="</custompassthrough>" ## aus parameter1 zusammnebauen
grep -n "$parameter1" ## -- das liefert die Zeilenummer N
## dann
head $N-1 $Dateiname tempfile ### -- schreibt alles vor " <custompassthrough>" in tempfile
echo "$Parameter1$Parameter2$Parameter3" >> tempfile # neuer Wert hintendran
M=$(wc -l guisettings.xml ) ## -- liefert die Anzahl der Zeilen der orignal datei "M"
O=$($M - $N) ## die Anzahl der Zeilen nach <custompassthrough>
tail $O $Dateiname tempfile2 ### -- schreibt alle Zeilen nach <custompassthrough> in Datei tempfile2
### dann ein
cat tempfile2 tempfile ## zusammenbauen - neues file nun unter tempfile
}
Aufruf wäre dann:
patcher "<custompassthrough>" "hdmi:CARD=NVidia,DevNo:7,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2"
Gruß
c.b.
P.S. wenn es das ist was Du willst -- dann baue ichs "richtig"
pille: (vdr1)
Anubis TYPHOON DVB-T Light;Terratec Cinergy1200; GA-M56S-S3; AMD X2 3800(35W); 2x1GB, PCIe 9500GT/LE-40M86BD; Hitachi 320GB; IDE DVD; OCZ 32GB SSD; Trust C-5250/opt./Denon-AV; lirc/DVICO/MD81035; USB-HD 256GB & 1TB ; GraphTFT/LCD 15"; easyVDR 1.0
chekov: (vdr2)
Esprimo5600/1,5GB/AMD Athlon64 X2 3800+; Club-3D GS8400 512MB/G98/19"CRT;Nova T-500; OCZ 32GB SSD, IDE DVD-Rom; lirc/DVICO/MD82467; easyvdr1.0
[color=#00008B]scotty: (work - no vdr)
GA-M52L-S3; AMD X4; 4x1GB, NVidia 9800GT/1GByte; Hitachi 320GB;60GByte SSD; 80GByte Hd for wine; SATA DVD; Trust C-5250;Kubuntu 12.10; Netz: Intel GBit PCIe cardt + ...
Beiträge: 7.041
Themen: 392
Registriert seit: Oct 2008
Bewertung:
216
Oder
patcher2()
{
Dateiname="guisettings.xml"
parameter1=$1 ## z.B. <custompassthrough>
parameter2=$2 ## z.B "hdmi:CARD=NVidia,DevNo:7,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2"
parameter3="</custompassthrough>" ## aus parameter1 zusammenbauen
delstring=$(grep $parameter1 $Dateiname)
echo "$delstring" > delfile.tmp
instring="parameter1$parameter2$parameter3"
echo $insstring > insfile.tmp
tripatch delfile.tmp insfile.tmp $Dateiname
}
Aufruf wie gehabt
pille: (vdr1)
Anubis TYPHOON DVB-T Light;Terratec Cinergy1200; GA-M56S-S3; AMD X2 3800(35W); 2x1GB, PCIe 9500GT/LE-40M86BD; Hitachi 320GB; IDE DVD; OCZ 32GB SSD; Trust C-5250/opt./Denon-AV; lirc/DVICO/MD81035; USB-HD 256GB & 1TB ; GraphTFT/LCD 15"; easyVDR 1.0
chekov: (vdr2)
Esprimo5600/1,5GB/AMD Athlon64 X2 3800+; Club-3D GS8400 512MB/G98/19"CRT;Nova T-500; OCZ 32GB SSD, IDE DVD-Rom; lirc/DVICO/MD82467; easyvdr1.0
[color=#00008B]scotty: (work - no vdr)
GA-M52L-S3; AMD X4; 4x1GB, NVidia 9800GT/1GByte; Hitachi 320GB;60GByte SSD; 80GByte Hd for wine; SATA DVD; Trust C-5250;Kubuntu 12.10; Netz: Intel GBit PCIe cardt + ...
Beiträge: 6.606
Themen: 338
Registriert seit: Jan 2007
Bewertung:
201
Danke Matthias,
aber das blöde in diesen xml-files ist, dass einzelne Parameter in verschiedenen Sections vorkommen können.
Der Parameter <mode> ist definitiv 3 x in der aktuellen gui-settings.
Das mit der Zeilennummer ist eine gute idee, nur müsste man beim suchen dieser nummer auch noch die section mit betrachten:
StartZeile=Zeile von Text <audiooutput>
EndZeile=Zeile von Text </audiooutput>
Editierzeile=Zeile mit mit Text <mode> UND Zeilennummer>StartZeile UND Zeilennummer<EndZeile
Die Mathematik bekomme ich hin, und die zusammengesetzte neue Zeile auch.
Aber wie lautet ein Ersetzungsbefehl mit awk oder sed der die Zeilennummer als Referenz hat?
Mit head und tail die Datei komplett zu zerlegen und wieder zusammenzusetzen finde ich "unwissenschaftlich" - aber werde es dennoch mal probieren...
Danke und Gruß
Michel
Produktiv-VDR:
msi K9N2G-Neo (nvidia 8200 onBoard) mit Athlon X2 4850e mit SamuraiZZ
2xNova-HDS2, DH102
Beiträge: 7.041
Themen: 392
Registriert seit: Oct 2008
Bewertung:
216
08.12.2012, 00:15
(Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2012, 00:18 von Captain_Beefheart.)
Hallo Michel
mit "sed" bzw. "awk" hast Du das Problem, das Du die Teile vorher genau kennen musst
aber die sind ja variabel - Du kennst sie also nicht.
-- verschieden Sections:
original Datei in drei Teile splitten
- vor section
- section
- nach section
"section" mit patcher2 bearbeiten
und alle drei Teile wieder zusammen bauen
-------
..unwissenschaftlich
hmmm head/tail/cat sind ganz alte "rock stable" GNU-Teile
und bevor ich mich mit allen möglichen Fallen bei sed/awk befasse .....
gruß
btw. ich vermute auch sed Und Co machen intern auch nix anderes als die Datei Zeile für Zeile zu zerlegen und
wieder zu montieren
pille: (vdr1)
Anubis TYPHOON DVB-T Light;Terratec Cinergy1200; GA-M56S-S3; AMD X2 3800(35W); 2x1GB, PCIe 9500GT/LE-40M86BD; Hitachi 320GB; IDE DVD; OCZ 32GB SSD; Trust C-5250/opt./Denon-AV; lirc/DVICO/MD81035; USB-HD 256GB & 1TB ; GraphTFT/LCD 15"; easyVDR 1.0
chekov: (vdr2)
Esprimo5600/1,5GB/AMD Athlon64 X2 3800+; Club-3D GS8400 512MB/G98/19"CRT;Nova T-500; OCZ 32GB SSD, IDE DVD-Rom; lirc/DVICO/MD82467; easyvdr1.0
[color=#00008B]scotty: (work - no vdr)
GA-M52L-S3; AMD X4; 4x1GB, NVidia 9800GT/1GByte; Hitachi 320GB;60GByte SSD; 80GByte Hd for wine; SATA DVD; Trust C-5250;Kubuntu 12.10; Netz: Intel GBit PCIe cardt + ...
Beiträge: 7.041
Themen: 392
Registriert seit: Oct 2008
Bewertung:
216
Hi
immer noch mit Syntaxfehlern
Code: #! /bin/bash
Dateiname="guisettings.xml"
splitter()
{
sppara1=$1 ### z.b.<audiooutput>
sppara2=</audiooutput> ### aus parameter1 zusammenbauen
CH_Parameter1=$2 ## z.B. <custompassthrough>
CH_Parameter2=$3 ## z.B "hdmi:CARD=NVidia,DevNo:7,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2"
COUNT_ALL=$(wc -l $Dateiname ) ## -- liefert die Anzahl der Zeilen der orignal datei "M"
COUNT_BEFORE=$(grep -n "$sppara1" $Dateiname | grep .... ) ## -- das liefert die Zeilenummer N
head $N-1 $Dateiname bevor.tmp ### -- schreibt alles vor "<audiooutput>>" in bevor.tmp
$COUNT_PART2=$($COUNT_ALL - $COUNT_BEFORE) ## die Anzahl der Zeilen nach <audiooutput
tail $COUNT_PART2 $Dateiname tempfile2 ### -- schreibt alle Zeilen nach <audiooutput in Datei tempfile2
COUNT_PART2=$(wc -l tempfile2 ) ## -- liefert die Anzahl der Zeilen
grep -n "$sppara2" tempfile2 | grep .... ## -- das liefert die Zeilenummer
head $COUNT_PART2 tempfile2 section.tmp ### -- schreibt alles bis "</audiooutput>" in section.tmp
tail $COUNT_PART2-1 tempfile2 section.tmp ### -- schreibt alle Zeilen nach </audiooutput> in Datei after.tmp
patcher2 $CH_Parameter1 $CH_Parameter2
cat after.tmp section.tmp
cat section.tmp bevor.tmp ## nun ist das geänderte in bevor.tmp
cp -f bevor.tmp $Dateiname
}
patcher2()
{
parameter1=$1 ## z.B. <custompassthrough>
parameter2=$2 ## z.B "hdmi:CARD=NVidia,DevNo:7,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2"
parameter3="</custompassthrough>" ## aus parameter1 zusammenbauen
delstring=$(grep $parameter1 section.tmp)
echo "$delstring" > delfile.tmp
instring="parameter1$parameter2$parameter3"
echo $insstring > insfile.tmp
tripatch delfile.tmp insfile.tmp section.tmp
}
# aufruf:
splitter "<audiooutput>" "<custompassthrough>" "hdmi:CARD=NVidia,DevNo:7,AES0=0x6,AES1=0x82,AES2=0x0,AES3=0x2"
pille: (vdr1)
Anubis TYPHOON DVB-T Light;Terratec Cinergy1200; GA-M56S-S3; AMD X2 3800(35W); 2x1GB, PCIe 9500GT/LE-40M86BD; Hitachi 320GB; IDE DVD; OCZ 32GB SSD; Trust C-5250/opt./Denon-AV; lirc/DVICO/MD81035; USB-HD 256GB & 1TB ; GraphTFT/LCD 15"; easyVDR 1.0
chekov: (vdr2)
Esprimo5600/1,5GB/AMD Athlon64 X2 3800+; Club-3D GS8400 512MB/G98/19"CRT;Nova T-500; OCZ 32GB SSD, IDE DVD-Rom; lirc/DVICO/MD82467; easyvdr1.0
[color=#00008B]scotty: (work - no vdr)
GA-M52L-S3; AMD X4; 4x1GB, NVidia 9800GT/1GByte; Hitachi 320GB;60GByte SSD; 80GByte Hd for wine; SATA DVD; Trust C-5250;Kubuntu 12.10; Netz: Intel GBit PCIe cardt + ...
Beiträge: 6.606
Themen: 338
Registriert seit: Jan 2007
Bewertung:
201
Danke für die guten Anregungen, Matthias!
Jetzt tut es bei mir soweit es soll - morgen mehr wie ich es gemacht habe...
Gruß
Michel
Produktiv-VDR:
msi K9N2G-Neo (nvidia 8200 onBoard) mit Athlon X2 4850e mit SamuraiZZ
2xNova-HDS2, DH102
|