
yaml 구성 파일(cli.yaml)이 있습니다. 구조를 가지고 있다
database:
host: "IP"
이제 파일 내용을 바꾸거나 더 정확하게는 문자열을 IP
내 컴퓨터의 현재 주소로 바꾸려고 합니다 IPV4
.
나는 터미널에 능숙하지 않기 때문에 작업을 여러 부분으로 나누었습니다.
예: IP를 얻으려면: ipconfig getifaddr en0
- IP가 다음과 같다고 가정합니다. - 10.0.0.1
이제 이것이 AWK
파일 내용을 regrex
.
그래서 나는 이 두 명령을 다음과 같이 연결해 보았습니다. ipconfig getifaddr en0 | awk '{print $1}'
그리고 그것은 효과가 있었습니다. 인쇄10.0.0.1
마침내:ipconfig getifaddr en0 | awk '{sub(/IP/,$1)}1' cli.yaml > temp.txt && mv temp.txt cli.yaml
그러나 내가 얻는 결과는 다음과 같습니다.
database:
host: "host:"
이것은 내가 기대했던 것이 아닙니다. 이제 나는 뭔가 잘못됐다고 생각했다 PIPE
. 그래서 나는 $1
대체를 사용합니다 $0
. 그러나 기대한 결과는 아직 달성되지 않았습니다.
어떤 팁이 있나요? 내가 뭘 잘못했나요! !
답변1
당신은 사용을 고려할 수 있습니다yqjq
값 업데이트를 위한 래퍼:
$ yq -Y --arg ip '10.0.0.1' '.database.host |= $ARGS.named.ip' cli.yaml
database:
host: "10.0.0.1"
답변2
해결책을 찾았지만 그 반대였습니다. 내가 사용하는 것은 REGEX
string 대신 입니다 IP
.
awk -v ip="$(ipconfig getifaddr en0)" \
'{sub(/((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/,ip)}1' \
./config/cli.yaml > temp.txt && mv temp.txt ./config/cli.yaml