Vraag Hoe vervang ik inhoud van een XML-bestand met behulp van shell scripting sed-opdracht?


ik heb een config.xml bestand met:

<userid>myUserId</userid>
<password>myPass</password>

Hoe kan ik vervangen myUserId en myPass door het gebruiken van sed?


1
2018-04-06 16:59


oorsprong


vervang myUserID en myPass met wat? - Avinash Raj
met het argument dat ik gepasseerd was, laat ik zeggen dat ik een shell-script uitvoer genaamd "changeUser.sh" ./changeUser.sh myname mypass - taymindis Woon
Kent u de beginwaarde van myUserId en myPass of wilt u uw eigen waarden tussen de tags plaatsen zonder te weten wat de vorige items waren? Als dat het geval is, zoekt u een xml-parser. Deze Q & A kan nuttig zijn. - Glutanimate
Wat is het voorkomen van die tags, verschijnen ze maar één keer in het hele bestand? - Lucio
Hoe past ik sed -n '/ <serverName /, / <\ / serverName / p' big_xml_file.xml toe In mijn scenario 'hoe vervang ik het zonder te weten wat het was? - taymindis Woon


antwoorden:


sed "s/myUserId/$1/;s/myPass/$2/" originalfile 

1
2018-04-06 17:17



Zou je het kunnen uitleggen? - Braiam
als je het script als volgt uitvoert: ./changeUser.sh ID PASS, dan zijn positionele argumenten $ 0, $ 1, $ 2 ./changeUser.sh, ID, PASS. Gebruik '' voor literals en gebruik "" voor variabelen. s betekent vervanger. - user3503167
Wat als ik niet weet wat mijn gebruikers-ID en wachtwoord tussen tag was? - taymindis Woon
waarschijnlijk kunt u een reguliere expressie gebruiken, iets als "<password>.*</password>" matchen. - user3503167
Hoe kan ik dit doen voor meerdere XML-bestanden? - Vicky Dev


Oplossing gevonden

echo "cat //body/username" | xmllint --shell config.xml | sed '/^\/ >/d' | sed 's/<[^>]*.//g'

Kan iemand mij deze complexe regex uitleggen (^ _ ^ ")


1
2018-04-07 10:02



Hoe verandert dit config.xml? - Thorbjørn Ravn Andersen


sed 's/old/new/g' test.txt > test1.txt

-2
2018-04-06 17:32



Dit manipuleert XML als een string. Dit is inherent broos en moet worden vermeden. - Thorbjørn Ravn Andersen