sed는 01.00.*을 찾아 ${version}으로 바꿉니다.

sed는 01.00.*을 찾아 ${version}으로 바꿉니다.

내가 사용하는 명령은

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}\"/로 교체하세요.

관련 정보