Как удалить узлы из ОГРОМНОГО (> 2 ГБ) XML-файл?

Если это хостинговый веб-сервер, то я бы заподозрил, что он настроен в классическом стиле веб-сервера. Это означает, что он разрешает входящие соединения на порту 80, но для безопасности они могут запретить исходящие соединения на порту 80. Я бы догадался, что это и есть проблема. curl и wget обычно работают без проблем. curl выбирает порт на основе заданного URI (http будет 80, https 443, ftp 21 и т.д.); когда не задан ни один протокол, как вы его используете, будет использоваться 80. Для устранения неполадок просто отключите на секунду ваш брандмауэр (или отредактируйте настройки, если вы беспокоитесь о том, что он не будет работать несколько секунд).

Обновление:

Могу ли я знать, есть ли простой способ подтвердить, что порт 80 (исходящий) заблокирован?

Я бы сказал, что вы уже сделали это. wget особенно сложно испортить. Если он не работает, я бы сказал, что это безопасная ставка. Еще лучший способ - взглянуть на вашу установку брандмауэра и подтвердить, что это так.

Есть ли какие-то проблемы с безопасностью, которые мы должны принять к сведению для включения порта 80 (исходящего)?

О, да. Дело не в том, что это делает вас менее защищенным, а в том, что, открыв его, вы получаете возможность сказать, ввести немного кода на JavaScript в БД вашего сайта, он может использовать ваш сайт для совершения преступлений, которые будет очень трудно отследить (потому что все указания на то, кто является злоумышленником, показывают, что вы виновны). Единственное, что может действительно очистить ваше имя - это ваши собственные журналы, которые не очень убедительны, так как вы предоставили их суду в первую очередь.

Я не думаю, что у меня есть права на отключение брандмауэра, пожалуйста, посоветуйте, какие настройки нужно будет отредактировать? Настроен ли брандмауэр на разрешение исходящего порта 80?

Возможно, вы правы. Я не могу сказать Вам ответ на этот вопрос, потому что Вы явно используете какое-то хостинговое решение. iptables - это название самого популярного брандмауэра Linux. Вы должны увидеть его в /etc/init.d, если он у Вас установлен. Если нет, то Вам нужно зайти на сайт для своего веб-хоста и узнать, как им управлять.

.
1
18.09.2014, 20:19
2 ответа

Вы можете использовать awk:

$cat my.xml | awk '/<b>/{hide=1} /<\/record>/ {hide=0} {if (hide==0) print;}' >mynew.xml

это спрячет все, начиная со строки, которая содержит и начнет отображаться со строки, содержащей

Если ваш XML - одна большая строка - просто разделите ее на строки и удалите символы новой строки после завершения преобразования.

$cat my.xml|sed 's/>/>\n/g'| awk ....... | tr -d '\n' >.....

Выбросьте xml, начните использовать YAML или JSON!

1
27.01.2020, 23:38

Лично я бы сделал что-нибудь на C (что возможно на самом низком уровне перед сборкой) и перебрал все узлы с помощью libxml.

Вот несколько примеров: http://www.xmlsoft.org/examples/

Используйте GCC для компиляции вашего кода.

1
27.01.2020, 23:38

Теги

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