Я хочу найти фрагмент текста в большом XML-файле и заменить его другим текстом. Размер файла составляет около 50 ГБ. Я хочу сделать это в командной строке. Я смотрю на Powershell и хочу знать, может ли он справиться с большими размерами. Также я хотел бы знать синтаксис для экранирования ключевых операторов в powershell. Я новичок PowerShellНайти и заменить в большом файле
В настоящее время я пытаюсь что-то вроде этого, но это не нравится
Get-Content C:\File1.xml | Foreach-Object {$_ -replace "xmlns:xsi=\"http:\/\/www\.w3\.org\/2001\/XMLSchema-instance\"", ""} | Set-Content C:\File1.xml
текст Я хочу, чтобы заменить это XMLNS: XSI = "HTTP: //www.w3. org/2001/XMLSchema-instance " с пустой строкой" ".
Вопросы
- Может Powershell обрабатывать большие файлы
- Как вызвать скрипт Powershell из командной строки
- Синтаксис для выхода ключевых операторов в Powershell и список ключевых операторов в powerShell.
- Я не хочу, чтобы замена происходила в памяти и предпочла потоковое использование в предположении , что не приведет сервер к его коленям.
- Существуют ли какие-либо другие подходы, я могу взять (Different инструменты/стратегии?)
Благодаря
@Keith, вы действительно доверяете PowerShell;) Я бы, возможно, беспокоиться об OutOfMemoryException, потому что 50 гб достаточно велик, чтобы собирать небольшие утечки памяти .. просто догадка. Лично я бы использовал непосредственно 'File.Open' и работал с потоком и сравнивал вручную (без регулярного выражения). – stej
И не нужно ли использовать какой-либо XML API для этого? Просто мысль. Dunno, если SAX или StAX доступны в .NET; Я слишком редко работаю с XML, но для этого замена строки звучит неправильно. – Joey
.NET имеет встроенный читатель с курсором (XmlReader/XmlTextReader) - механизм вытягивания, который немного отличается от подхода SAX push. Это немного утомительно, но хороший способ пойти, когда весь документ Xml не поместится в памяти. –