Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. 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