sed/awk를 사용하여 pom.xml의 버전 번호를 업데이트하세요.

sed/awk를 사용하여 pom.xml의 버전 번호를 업데이트하세요.

나는 pom.xml다음과 같은 형식을 가지고 있습니다 :

<project>

<modelVersion>1.0.0</modelVersion>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>

2.0.0, 3.0.0, 4.0.0 등과 같이 sed/ 명령을 실행할 때마다 awkmodelVersion 번호를 +1씩 늘리고 싶습니다 .pom.xml

따라서 명령을 실행할 때 예상되는 출력은 다음과 같아야 합니다.

 <project>

<modelVersion>2.0.0</modelVersion>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>

동일한 명령을 다시 실행하면 출력은 다음과 같아야 합니다.

 <project>

<modelVersion>3.0.0</modelVersion>
 
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>

어느 것이 선호됩니까? 어떻게 해야 합니까?

답변1

다음 awk스크립트를 사용하십시오.

awk '/<modelVersion>/ {
        temp = $0
        sub(/.*<modelVersion>/, "", temp)
        sub(/\..*/, "", temp)
        incremented = temp+1
        sub(temp, incremented)
    }
    {   print   }
    '
  • 을(를) 포함하는 것으로 나타났습니다 modelVersion.
  • 전체 행의 임시 복사본을 만듭니다.
  • <modelVersion>해당 줄(및 그 앞의 모든 항목)의 복사본에서 제거합니다.
  • 그런 다음 첫 번째 항목을 삭제하세요..그리고 그 이후의 모든 것. 그러면 버전 번호의 첫 번째 구성 요소가 남습니다. 예: 42.0.042.
  • 1을 더합니다(예: → 43).
  • 그런 다음 입력 라인을 수정하여 현재 숫자를 증가된 숫자로 바꿉니다.

명령을 실행 awk하고 출력을 파일로 출력합니다.

으악'(위에)' pom.xml > new.xml
출력이 올바른지 확인한 다음

mv new.xml pom.xml

답변2

업데이트된 예제를 보면 아마도 GNU awk를 match()의 세 번째 인수로 사용하여 원하는 것일 것입니다.

awk 'match($0,/(.*<modelVersion>)([0-9]+)(.*)/,a) {$0=a[1] a[2]+1 a[3]} 1' file

원본 파일을 업데이트하려면 awk -i inplace '...' file위의 내용에는 어쨌든 GNU awk가 필요하고 -i inplace.


원래 답변: 이것은 아마도 match()의 세 번째 인수로 GNU awk를 사용하여 원하는 것일 것입니다.

awk 'match($0,/(.*<modelVersion>)([0-9]+)(.*)/,a) {$0=a[1] (++cnt) a[3]} 1' file

귀하의 요구 사항이 명확하지 않고 1개 값의 샘플 입력을 사용하여 값 증가를 테스트할 수 없으며 예상되는 출력이 제공되지 않기 때문에 위의 내용은 테스트되지 않았습니다.

관련 정보