質問
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号線 各バージョンの最初の行のみを保持