파일 내용을 컴퓨터의 현재 IP 주소로 바꾸십시오.

파일 내용을 컴퓨터의 현재 IP 주소로 바꾸십시오.

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

해결책을 찾았지만 그 반대였습니다. 내가 사용하는 것은 REGEXstring 대신 입니다 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

관련 정보