Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wie in xml-file parameter einstellen?
#1
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
Zitieren
#2
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 + ...
Zitieren
#3
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
Zitieren
#4
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 + ...
Zitieren
#5
Oder  Wink

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 + ...
Zitieren
#6
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
Zitieren
#7
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 + ...
Zitieren
#8
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 + ...
Zitieren
#9
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
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: