Chcę znaleźć fragment tekstu w dużym pliku XML i chcę go zastąpić innym tekstem. Rozmiar pliku wynosi około (50 GB). Chcę to zrobić w wierszu poleceń. Patrzę na Powershell i chcę wiedzieć, czy poradzi sobie z dużymi rozmiarami. Chciałbym również znać składnię, by uniknąć kluczowych operatorów w grze powershell. Jestem nowicjuszem PowerShellZnajdź i zamień w dużym pliku
Obecnie próbuję coś takiego, ale nie podoba
Get-Content C:\File1.xml | Foreach-Object {$_ -replace "xmlns:xsi=\"http:\/\/www\.w3\.org\/2001\/XMLSchema-instance\"", ""} | Set-Content C:\File1.xml
Tekst chcę zastąpić to xmlns: xsi = "http: //www.w3. org/2001/XMLSchema-instance " z pustym ciągiem" ".
Pytania
- Can PowerShell obsługiwać duże plików
- Jak wywołać skrypt powershell z wiersza poleceń
- składni ucieczki kluczowych operatorów w PowerShell, a następnie listę kluczowych operatorów w powerShell.
- Nie chcę, aby zastąpić się w pamięci i wolę przesyłanie strumieniowe przy założeniu, , które nie przyniosą serwerowi na kolanach.
- Czy są jakieś inne sposoby mogę wziąć (inny tools/strategię?)
Dzięki
@Keith, naprawdę można ufać PowerShell;) Chciałbym być może martw się o wyjątek OutOfMemoryException, ponieważ 50 gb jest wystarczająco duże, aby zebrać małe wycieki pamięci. Tylko zgadnij. Osobiście użyłbym bezpośrednio 'File.Open' i pracowałem ze strumieniem i porównywałem ręcznie (bez regex). – stej
A do tego nie powinno się używać jakiegoś interfejsu API XML? Tylko myśl. Dunno, jeśli SAX lub StAX są dostępne w .NET; Pracuję zbyt rzadko z XML, ale ciąg znaków zastępuje dźwięki niewłaściwe. – Joey
. NET ma przedni czytnik stylu kursora (XmlReader/XmlTextReader) - mechanizm ściągania, który jest nieco inny niż podejście push SAX. To trochę żmudne, ale dobrym sposobem, aby przejść, gdy cały dokument Xml nie mieści się w pamięci. –