Jump to content
Калькуляторы

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

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

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

 

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

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

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

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.