#xml #bash
#xml #bash
Вопрос:
У меня есть этот xml, и мне нужно извлечь хост, порт, пользователя, передачу. ПРИМЕР:
host1 port1 user1 pass1
host2 port2 user2 pass2
Я пытался это сделать, но проблема в том, чтобы расположить их в правильном порядке, спасибо за помощь.
<Server>
<Host>host1</Host>
<Port>port1</Port>
<User>user1</User>
<Pass>pass1</Pass>
</Server>
<Server>
<Host>host2</Host>
<Port>port2</Port>
<User>user2</User>
<Pass>pass2</Pass>
</Server>
Комментарии:
1. Мы здесь не для того, чтобы писать программы или скрипты для вас. Мы здесь, чтобы помочь вам с программами или скриптами, которые вы написали . Пожалуйста, покажите свои усилия и объясните причины препятствий, с которыми вы столкнулись.
2. Вы думаете, что я запрашиваю программу? что вы за программисты?
3. Да, вы запрашиваете программу. Все, что вы сделали, это загрузили фрагмент XML и требование на этот сайт, а затем подождали, пока кто-нибудь решит это за вас. Это то, что я называю ленивым.
Ответ №1:
С помощью GNU sed и вставить из GNU Core Utilities:
sed -n "/<Server>/,/</Server>/{s/.*>(.*)<.*/1/p}" < filename | paste -d " " - - - -
Вывод:
host1 port1 user1 pass1
host2 port2 user2 pass2
Комментарии:
1. спасибо за воспроизведение, это сработало, но я думаю, что мой вопрос не завершен, поэтому позвольте мне добавить, пожалуйста .. есть несколько строк между они мне не нужны <Host> host1</Host> <blab> bla <blab> <Port> port1</Port> <User>user1</User> <Pass> pass1</ Pass> как мне их игнорировать, или как мне просто взять то, что мне нужно, и игнорировать все остальное спасибо
2. Вставьте перед
| paste
чем-то вроде| grep -v blab
, чтобы игнорировать строки с blab.3. Было бы лучше использовать некоторые инструменты, оптимизированные для синтаксического анализа xml, такие как команды
xmllint
orxmlstarlet
(например, с помощью запроса Xpath) или более мощные языки оболочки, такие как perl, python или php (cli).