Перейти к содержимому
Калькуляторы

Подскажите, как вырезать фрагмент текста (XML-ноду)

Сломался скрипт, который забирает выгрузки с сервера РКН.

Видимо размер файла вырос и теперь парсер SAX не справляется.

 

Есть XML-файл, в котором есть нода registerZipArchive большого объема.

Я хочу ее содержание вынести в отдельный файл, а в исходном файле оставить пустую ноду.

Вырезать видимо нужно с помощью sed. Не подскажите, как именно это сделать?

Нужно сделать так, что если в тексте есть <registerZipArchive>data...</registerZipArchive>, то сохранить "data..." в отдельный файл, а в исходном файле его вырезать (чтобы получилось <registerZipArchive></registerZipArchive>).

 

Использую такой запрос:

sed -e 's|<registerZipArchive>.+</registerZipArchive>|<registerZipArchive></registerZipArchive>|' response.xml

Но видимо что-то тут не то, потому что эта команда выводит полное содержание XML-файла, не вырезая из него архив в base64.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос решился, оказалось что sed не понимает +.

Заменил на *.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С вырезанием из исходного запроса все получилось:

sed 's|<registerZipArchive>.*</registerZipArchive>|<registerZipArchive>...cut...</registerZipArchive>|g' data.xml > data.xml

 

А как бы мне перед этим получить вырезанную часть в отдельный файл?

sed 's|<registerZipArchive>(.*)</registerZipArchive>|$1|g' data.xml > base64

не работает, sed не понимает $1 (да и скобки тоже).

В нем вроде бы есть метки, но я не понял, как их использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Потому что он выдает ошибку "huge text node: out of memory".

 

Вообщем сделал так:

 -n 's|.*<registerZipArchive>\(.*\)</registerZipArchive>.*|\1|p'

Работает, хотя я и не очень понимаю, почему скобки нужно экранировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня тоже до недавнего времени работало, а потом перестало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Работает, хотя я и не очень понимаю, почему скобки нужно экранировать.

man regex и не забывать, что по умолчанию включены basic, а не extended

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.