나는 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
/ 명령을 실행할 때마다 awk
modelVersion 번호를 +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.0
→42
. - 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개 값의 샘플 입력을 사용하여 값 증가를 테스트할 수 없으며 예상되는 출력이 제공되지 않기 때문에 위의 내용은 테스트되지 않았습니다.