Как извлечь информацию из xml с помощью bash

#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 or xmlstarlet (например, с помощью запроса Xpath) или более мощные языки оболочки, такие как perl, python или php (cli).