Я хочу прочитать pom.xml («Объектная модель проекта» Maven) и извлечь информацию о версии. Вот пример:
<?xml version="1.0" encoding="UTF-8"?><project
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>project-parent</artifactId>
<name>project-parent</name>
<version>1.0.74-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.sybase.jconnect</groupId>
<artifactId>jconnect</artifactId>
<version>6.05-26023</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>
Как я могу извлечь версию '1.0.74-SNAPSHOT' сверху?
Хотелось бы сделать это, используя простой сценарий bash sed или awk. В противном случае простой питон является предпочтительным.
РЕДАКТИРОВАТЬ
скованность
Окно linux находится в корпоративной среде, поэтому я могу использовать только те инструменты, которые уже установлены (не то, чтобы я не мог запросить такие утилиты, как xml2, но мне пришлось пройти через много бюрократизма). Некоторые из решений очень хороши (уже изучите несколько новых трюков), но они могут быть неприменимы из-за ограниченной среды
обновленный список XML
Я добавил тег зависимостей в исходный список. Это покажет, что какое-то хакерское решение может не сработать в этом случае.
Distro
Я использую дистрибутив RHEL4
Ответы:
xml2 может конвертировать xml в / из линейно-ориентированного формата:
источник
Другой способ: xmlgrep и XPath:
Недостаток: медленный
источник
xml_grep
С помощью
python
С помощью
xmlstarlet
С помощью
xmllint
источник
cat (//x:version)[1]/text()
при использованииxmllint
тоже работает!Clojure способ. Требуется только JVM со специальным файлом JAR:
Скала путь:
Отличный способ:
источник
Вот альтернатива в Perl
Он работает с пересмотренным / расширенным примером в вопросах, которые имеют несколько элементов «версии» на разных глубинах.
источник
Hacky путь:
Полагается на правильное отступание требуемого
<version>
источник
<version>
вещах.Разработать очень неуклюжее решение с одним вкладышем
Sed в конце очень уродлив, но я не смог распечатать текст узла с одним только mindom.
Обновление от _Vi :
Менее хакерская версия Python:
Обновление от меня
Другая версия:
источник
XSLT способ:
источник
если «в xml много тегов версии», то лучше забыть о том, чтобы делать это с «простыми инструментами» и регулярными выражениями, что не сработает.
попробуйте этот питон (без зависимостей):
источник
Вот однострочник, использующий sed:
источник
<version>
s могут быть только внутри зависимостей.awk прекрасно работает без использования каких-либо дополнительных инструментов.
cat pod.xml
простой и понятный способ получить значение
<packaging>
тега:источник
Вот, попробуйте это:
источник
Я знаю, что ваш вопрос говорит о Linux, но если вам нужно сделать это в Windows без каких-либо сторонних инструментов, например, чтобы вы могли поместить его в пакетный файл, Powershell может извлечь любой узел из файла pom.xml, например, так :
источник
Эта
-n
опция позволяет избежать печати несовпадающих строк; первый/.../
метод match ( ) находится перед строкой, в которой находится искомый текст;n
команда переходит к следующей строке, гдеs
экстракты соответствующей информации через в группу захвата (\(...\)
), и (обратную ссылка\1
).p
распечатывает,q
выходит.источник