Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
xml+regex durere de cap
Last Updated: Jan 18 2022 18:53, Started by
valeriux1
, Jan 14 2022 11:12
·
0
#1
Posted 14 January 2022 - 11:12
Salut comunitate! Ajutati-ma va rog sa rezolv urmatoarea problema.
Am asa o portiune de xml: <PackageReference Include="Test1"> <Version>2.1.3</Version> </PackageReference> <PackageReference Include="Test2"> <Version>4.7.1</Version> </PackageReference> Am nevoie sa inlocuiesc valoarea lui Version of Test1 cu o valoare custom folosind bash. Am ales sa o fac prin sed, arata cam asa sed -i '' 's#<Version>\([^<][^<]*\)</Version>#<Version>'$variable'</Version>#' ../../sdk/Somefolder/Somefile.csprojDar funcitoneaza numai daca am 1 singur tag Version in fisier. Cum sa leg acest sed anume de Version pentru<PackageReference Include="Test1">. ? |
#2
Posted 14 January 2022 - 14:47
#3
Posted 14 January 2022 - 15:26
Vre-un exemplu / idee cum as putea sa fac asta in bash?
Edited by Dany_Darke, 14 January 2022 - 15:57. |
#4
Posted 14 January 2022 - 15:26
Inteleg ca vrei sa faca replace si daca ai mai multe aparitii de <Version> in acelasi fisier?
Dacă asta e problema, atunci adaugă un g (global) dupa ultimul # din replace-ul de la sed. Adica: sed -i '' 's#<Version>\([^<][^<]*\)</Version>#<Version>'$variable'</Version>#g' fisier |
#5
Posted 14 January 2022 - 15:58
ai dreptate am mai multe de version de asta as fi vrut sa il leg cumva de atributul Include din PackageReference.
Am gasit o solutie sa obtin valoarea, acum trebuie doar sa fac replace. xpath -e 'string(.//PackageReference[@Include="Refit"]/Version/text()' old.xml > new.xml
Edited by Dany_Darke, 14 January 2022 - 18:40.
|
#6
Posted 14 January 2022 - 17:42
In sed nu stiu daca reusesti, am impresia ca citeste line by line si nu cred ca il poti forta sa faca altfel.
Tu ai nevoie sa legi de tagul X indiferent daca e pe aceeasi linie sau pe alta si deci regexul trebuie sa fie multilinie. Ai putea face cu perl, cam asa: variable="blabla"; perl -s -pi -e "BEGIN{undef $/} ; s/(<PackageReference Include=\"Test1\">\s+<Version>)[^<]+(<\/Version>)/\1${var}\2/smg" -- -var="$variable" file_name Inlocuiesti variable="blabla" cu definitia ta si lui perl ii zici sa puna in variabila lui var ce ai in variabila din bash. Fa si tu un backup inainte, sa nu iasa vreo duda. :-) |
#7
Posted 14 January 2022 - 17:50
Imi goleste valoarea din <Versions></Versions>
Edited by Dany_Darke, 14 January 2022 - 18:40.
|
#8
Posted 14 January 2022 - 18:49
Dacă Python e disponibil, folosește lxml și nu te mai chinui cu regex.
Sau văd că Python are și ceva integrat și nu trebuie lxml: https://docs.python....lementtree.html |
#9
Posted 14 January 2022 - 19:51
#10
Posted 14 January 2022 - 23:27
pingutux, on 14 ianuarie 2022 - 19:51, said:
Inseamna ca valoarea lui $variable e nula. Cum aloci valoare pentru variable ala? am alocat standard, uite aici: valeriu.sova@ias-mb-089 FodySampleApp % cat old.xml <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PackageReference Include="Test1"> <Version>2.2.1</Version> </PackageReference> <PackageReference Include="Test2"> <Version>4.7.1</Version> </PackageReference> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> </Project>% valeriu.sova@ias-mb-089 FodySampleApp % variable=0.0.0 valeriu.sova@ias-mb-089 FodySampleApp % perl -s -pi -e "BEGIN{undef $/} ; s/(<PackageReference Include=\"Test1\">\s+<Version>)[^<]+(<\/Version>)/\1${var}\2/smg" -- -v="$variable" old.xml valeriu.sova@ias-mb-089 FodySampleApp % cat old.xml <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PackageReference Include="Test1"> <Version></Version> </PackageReference> <PackageReference Include="Test2"> <Version>4.7.1</Version> </PackageReference> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> </Project> valeriu.sova@ias-mb-089 FodySampleApp % pingutux, on 14 ianuarie 2022 - 17:42, said:
In sed nu stiu daca reusesti, am impresia ca citeste line by line si nu cred ca il poti forta sa faca altfel. Tu ai nevoie sa legi de tagul X indiferent daca e pe aceeasi linie sau pe alta si deci regexul trebuie sa fie multilinie. Ai putea face cu perl, cam asa: variable="blabla"; perl -s -pi -e "BEGIN{undef $/} ; s/(<PackageReference Include=\"Test1\">\s+<Version>)[^<]+(<\/Version>)/\1${var}\2/smg" -- -var="$variable" file_name Inlocuiesti variable="blabla" cu definitia ta si lui perl ii zici sa puna in variabila lui var ce ai in variabila din bash. Fa si tu un backup inainte, sa nu iasa vreo duda. :-) A mers, doar am inlocuit " cu '. Merci mult de ajutor. |
|
#11
Posted 18 January 2022 - 16:55
pingutux, on 14 ianuarie 2022 - 17:42, said:
In sed nu stiu daca reusesti, am impresia ca citeste line by line si nu cred ca il poti forta sa faca altfel. Tu ai nevoie sa legi de tagul X indiferent daca e pe aceeasi linie sau pe alta si deci regexul trebuie sa fie multilinie. Ai putea face cu perl, cam asa: variable="blabla"; perl -s -pi -e "BEGIN{undef $/} ; s/(<PackageReference Include=\"Test1\">\s+<Version>)[^<]+(<\/Version>)/\1${var}\2/smg" -- -var="$variable" file_name Inlocuiesti variable="blabla" cu definitia ta si lui perl ii zici sa puna in variabila lui var ce ai in variabila din bash. Fa si tu un backup inainte, sa nu iasa vreo duda. :-) poti sa ma ajuti te rog sa primesc valoarea deja setata tot prin perl? |
#12
Posted 18 January 2022 - 18:53
Am rezolvat cu xmllint
xmllint --xpath "//*[local-name()='PackageReference'][@Include='Test1']/*[local-name()='Version']/text() file.xml |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users