Как убрать текст между словами из txt / xml файла?

Можно ли с помощью регулярных выражений решить такие задачи, если да, то прошу помощи.

Есть файл, разбитый на строки, кодировка UTF-8.

1. С начала файла нужно удалить всё до слова
<xml_catalog

2. Удалить всё между
<catalog>
...
<items>


Команду PS написал - (gc source.xml -Encoding UTF8) -replace '%regexp%', '' >out.xml , а вот с регуляркой никак
  • Вопрос задан
  • 378 просмотров
Решения вопроса 1
@lxnvr Автор вопроса
Решил проблему так:
1. Мусорных строк в файле всегда 4, так что просто удаляем первые 4 строки:
(gc source.xml -Encoding UTF8 | select -Skip 4) >out1.xml

| sc out1.xml - не сработает, т.к. сконвертирует символы переноса строк.

2. Спасибо dodo512
(gc out1.xml -Encoding UTF8 | out-string) -replace '(?s)(?<=<catalog>).*?(?=<items>)', '' >out.xml


10-мб файл обрабатывает за пару секунд.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@MaxKozlov Куратор тега PowerShell
0. Файл нужно слепить в одну строку
1. ".*<xml_catalog'"
2. "<catalog>.*?<items>"
Ответ написан
Комментировать
@dodo512
(gc source.xml -Encoding UTF8 | out-string) -replace '(?s).*?(?=<xml_catalog)', '' -replace '(?s)(?<=<catalog>).*?(?=<items>)', '' >out.xml
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы