질문
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호선 각 버전의 첫 번째 줄만 유지