Voglio trovare una parte di testo in un file xml di grandi dimensioni e voglio sostituirlo con un altro testo. La dimensione del file è intorno a 50 GB. Voglio farlo in linea di comando. Sto guardando PowerShell e voglio sapere se può gestire le grandi dimensioni. Inoltre vorrei conoscere la sintassi per l'escape degli operatori chiave in PowerShell. Sono un novizio PowerShellTrova e sostituisci in un file di grandi dimensioni
Attualmente sto cercando qualcosa di simile, ma non piace
Get-Content C:\File1.xml | Foreach-Object {$_ -replace "xmlns:xsi=\"http:\/\/www\.w3\.org\/2001\/XMLSchema-instance\"", ""} | Set-Content C:\File1.xml
Il testo voglio sostituire è xmlns: xsi = "http: //www.w3. org/2001/XMLSchema-instance " con stringa vuota" ".
Domande
- Can PowerShell gestire grandi file
- Come chiamare lo script PowerShell da linea di comando
- La sintassi per sfuggire chiave operatori in PowerShell e l'elenco degli operatori chiave in PowerShell.
- Non voglio che la sostituzione avvenga nella memoria e preferisco lo streaming assumendo che non porterà il server a le sue ginocchia.
- Ci sono altri approcci che posso prendere (Diverso strumenti/strategia?)
Grazie
@Keith, si ha realmente fidarsi PowerShell;) lo farei forse preoccuparsi di OutOfMemoryException perché 50gb è abbastanza grande da raccogliere piccole perdite di memoria .. solo un'ipotesi. Personalmente userò direttamente 'File.Open' e lavorerò con un flusso e confronteremo manualmente (nessuna regex). – stej
E non si dovrebbe usare una sorta di API XML per fare questo? Solo un pensiero. Non so se SAX o StAX sono disponibili in .NET; Lavoro troppo raramente con XML, ma fare una stringa sostituisce i suoni sbagliati per questo. – Joey
.NET ha un forward-only, lettore di stili di cursore (XmlReader/XmlTextReader) - un meccanismo di pull che è leggermente diverso dall'approccio push SAX. È un po 'noioso, ma un buon modo per andare quando l'intero documento Xml non si adatta alla memoria. –