pom.xmlから最も高い番号のモジュールを除くすべてのモジュールを削除するスクリプト

pom.xmlから最も高い番号のモジュールを除くすべてのモジュールを削除するスクリプト

質問

Talend DI / ESBプロジェクトの巨大なpom.xmlがあります。ここでは、異なるTalend固有のバージョンで同じモジュールに複数の行を設定できます(これは必要ありません:-()

だから最後に、最も高い番号のモジュールを除くすべてのモジュール行が削除されるようにpom.xmlをクリーンアップしたいと思います。私の例では、この行は次のようになります。

タスク/パス/specialbookings_0.7

維持し、同じモジュールの他のすべてのモジュールラインを削除する必要があります。問題は転職の場合です。 0.10は数値的に0.9未満です。

私は正規表現の専門家ではありませんが、sedを使用するのが良いアプローチだと思います。 !

よろしくお願いします。

pom.xmlのサンプルセクション

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.example.com</groupId>
  <artifactId>code.Master</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>
  <name>Codes Master</name>
  <url>http://www.example.com/</url>
  <modules>
    ...
    <module>jobs/routes/reservation_0.5</module>
    <module>jobs/routes/reservation_0.9</module>
    <module>jobs/routes/reservation_0.10</module>
    <module>jobs/routes/reservation_0.11</module>
    <module>jobs/routes/reservation_1.0</module>
    <module>jobs/routes/reservation_1.10</module>
    <module>jobs/routes/reservation_1.11</module>
    ...
    <module>jobs/routes/specialbookings_0.1</module>
    <module>jobs/routes/specialbookings_0.2</module>
    <module>jobs/routes/specialbookings_0.3</module>
    <module>jobs/routes/specialbookings_0.4</module>
    <module>jobs/routes/specialbookings_0.5</module>
    <module>jobs/routes/specialbookings_0.6</module>
    <module>jobs/routes/specialbookings_0.7</module>
    ...
    <module>jobs/routes/employee_0.1</module>
    <module>jobs/routes/employee_0.2</module>
    <module>jobs/routes/employee_0.3</module>
    <module>jobs/routes/employee_1.0</module>
    <module>jobs/routes/employee_1.1</module>
    <module>jobs/routes/employee_1.10</module>
    <module>jobs/routes/employee_1.2</module>
    <module>jobs/routes/employee_1.3</module>
    <module>jobs/routes/employee_1.4</module>
    <module>jobs/routes/employee_1.5</module>
    <module>jobs/routes/employee_1.6</module>
    <module>jobs/routes/employee_1.7</module>
    <module>jobs/routes/employee_1.8</module>
    <module>jobs/routes/employee_1.9</module>
    <module>jobs/routes/employee_2.0</module>
    <module>jobs/routes/employee_2.1</module>
    <module>jobs/routes/employee_2.2</module>

    <module>jobs/routes/article2erpmodel_0.1</module>
    <module>jobs/routes/article2erpmodel_0.10</module>
    <module>jobs/routes/article2erpmodel_0.11</module>
    <module>jobs/routes/article2erpmodel_0.12</module>
    <module>jobs/routes/article2erpmodel_0.13</module>
    <module>jobs/routes/article2erpmodel_0.14</module>
    <module>jobs/routes/article2erpmodel_0.15</module>
    <module>jobs/routes/article2erpmodel_0.16</module>
    <module>jobs/routes/article2erpmodel_0.17</module>
    <module>jobs/routes/article2erpmodel_0.18</module>
    <module>jobs/routes/article2erpmodel_0.19</module>
    <module>jobs/routes/article2erpmodel_0.2</module>
    <module>jobs/routes/article2erpmodel_0.20</module>
    <module>jobs/routes/article2erpmodel_0.3</module>
    <module>jobs/routes/article2erpmodel_0.4</module>
    <module>jobs/routes/article2erpmodel_0.5</module>
    <module>jobs/routes/article2erpmodel_0.6</module>
    <module>jobs/routes/article2erpmodel_0.7</module>
    <module>jobs/routes/article2erpmodel_0.8</module>
    <module>jobs/routes/article2erpmodel_0.9</module>
  </modules>
</project>

修正する

@RomanPerekhrestのコメントの後、このルールの例外を検索して上記の例の最後に追加しました。

答え1

次のようなものを好きなように縫います。

vim -c:1 -c'/<modules>' -c+1 -c':mark q' \
   -c'/<.modules>' -c-1 -c':mark w' \
   -c "'q,'w"'!sort -rV | sort -t_ -k1,1 -u' pom.xml

スクリプトで実行するのは完全に安全ではなく、いくつかの前提が含まれています。それらのいくつかは

  • 各モジュール名には、バージョン番号の前にアンダースコアが含まれています。
  • xmlは上記のようにフォーマットされ、モジュールとモジュールタグは別々の行に表示されます。そうでない場合は、まずよりきれいなXMLを使用する必要があります。

分解コマンド:

  • 1号線 確実にするために、ファイルの先頭に行き、最初のモジュールをqとしてマークします。
  • 2号線 最後のモジュールをwとしてマーク
  • 3号線 モジュール名とバージョン番号に基づいて逆順にソート
  • 3号線 各バージョンの最初の行のみを保持

関連情報