var의 값을 sed로 바꾸는 방법

var의 값을 sed로 바꾸는 방법

변수 맵이 있고 bash 스크립트에서 특정 변수의 값을 동적으로 바꿔야 합니다. 내 변수는 다음과 같습니다

array = {
    node1 = [
         {
           "apacheversion" = "1.0"
           "mysqlversion"  = "2.0"
         }
    ]
    node2 = [
         {
           "apacheversion" = "1.0"
           "mysqlversion"  = "2.0"
         }
    ]
}

그래서 apacheversion과 mysqlversion 값을 'sed'로 바꿔야 합니다.

"apacheversion" = "new.value" "mysqlversion" = "new.value"

특정 노드에서만 실행하는 방법이 있나요? 예를 들어 node1만 교체하세요. 변수에 대한 임시 파일이므로 가능하지 않아도 상관 없습니다.

감사해요!

답변1

일반적으로 파서를 사용하는 것이 더 좋지만 한 가지 접근 방식은 awk.regex를 통해 블록을 선택한 /start/,/end/다음 해당 블록에서만 작업하는 것입니다.

 awk '/node1 = \[/,/\]/ {
        if ($0 ~ /apacheversion/) {gsub(/1.0/,"new.version")}
        if ($0 ~ /mysqlversion/) {gsub(/2.0/,"new.version")}
     } 1' file.terra

예를 들어 필드 구분 기호로 정의하면 패턴 일치 + 바꾸기를 =사용하는 대신 더 일반적이고 필드 2에 있는 내용을 바꿀 수 있습니다 .gsub

이제 스크립트에서 이를 사용하려면 환경에서 변수를 가져옵니다.

#!/bin/bash
varAPA=2.0
varSQL=5.0
awk -v newAPA="$varAPA" -v newSQL="$varSQL" '/node1 = \[/,/\]/ {
        if ($0 ~ /apacheversion/) {gsub(/1.0/,newAPA)}
        if ($0 ~ /mysqlversion/) {gsub(/2.0/,newSQL)}
     } 1' file.terra

관련 정보