내가 사용하는 명령은
sed -i "s/01.00.*/${version}/g" file.json
결과:"${version}
예상되는"${version}"
예:
"params": {
"pipeline_branch":"master",
"git_repo_url":"blah.git",
"ARTIFACTORY_TAR_VERSION" : "01.00.00.26"
}
01.00.00.26 값(또는 변경되는 01.00.*, 일반적으로 pom 버전)을 sed하고 쉘을 통해 검색된 "${version}" 값으로 바꿀 수 있기를 원합니다.
Jenkins 작업을 통해 Linux에서 실행할 계획입니다. 내가 사용한 명령은 sed
(거의) 완벽하게 작동했지만 끝에 있는 큰따옴표를 제거했습니다.
답변1
sed 명령의 문제점은 일치하는 항목이 너무 많다는 것입니다. 이 패턴을 살펴보고 분석해 보겠습니다.
/01.00.*/
01 # exact match (so far, so good)
. # any character (too generous)
00 # exact match
.* # the rest of the line
우리가 일치시키려는 항목 01.00.
뒤에는 숫자와 점이 여러 개 있습니다.
/01\.00\.[.0-9]*/
단일 문자가 아닌 점을 사용하여 \.
일치 시킵니다..
답변2
관련 라인은 이 라인입니다
"ARTIFACTORY_TAR_VERSION" : "01.00.00.26"
몇 가지 옵션이 있습니다. 행에 나타나는 내용을 요청한 "ARTIFACTORY_TAR_VERSION"
다음 버전 번호처럼 보이는 것을 바꾸거나, 덜 주의해서 버전 번호처럼 보이는 것을 바꿀 수도 있습니다.
01.00.
이 옵션은 숫자와 점이 포함된 버전 번호 처럼 보이는 모든 항목을 대체합니다 .
sed -i "s/01\.00\.[0-9.]*/${version}/g" file.json
이는 패턴을 큰따옴표로 제한합니다(셸이 패턴을 해석하는 것을 방지하기 위해 RE 중간에 작은따옴표 가드에서 큰따옴표 가드로 전환했습니다).
sed -ri 's/(")[[:digit:].]*"/'"\1${version}\1/g" file.json
마지막 패턴에서는 패턴이 VERSION
어딘가에 단어가 포함된 행만 일치해야 합니다.
sed -ri '/VERSION/s/(")[[:digit:].]*"/'"\1${version}\1/g" file.json
테스트를 위해 반드시 파일을 수정할 필요는 없다는 점을 잊지 마세요.현장에서. 플래그 를 생략 -i
하고 소스 파일을 변경하지 않고도 출력을 검사할 수 있습니다.
답변3
sed -i "s/01.00.*\"/\${버전}\"/g" file.json
-- s/01.00.*\"/ 까지 이 줄을 검색하고 -- /${version}\"/로 교체하세요.