hostname -i
내가 실행 하여 다음과 같은 결과를 얻었다 고 가정해 보겠습니다 .
root@linux:/# hostname -i
192.168.1.1
root@linux:/#
출력(IP 주소만)을 파이핑하여 특정 파일의 특정 문자열을 어떻게 바꿀 수 있습니까?
이 명령의 출력 (예: sed
OR 사용 )을 다음 부분으로 파이프하고 싶습니다.awk
my_server_ip
"server":"my_server_ip",
"server_port":8388,
답변1
"server"
특정 문자열이 아닌 후행 따옴표에 있는 내용을 변경하고 싶은 것 같습니다. my_server_ip
그렇다면 sed를 사용하세요.
$ sed 's/\("server":"\)[^"]*/\1'"$(hostname -i)"'/' file
"server":"<the host name>",
"server_port":8388,
또는 awk( hostname -i
출력에 역참조 메타문자나 sed 구분 기호가 포함될 수 있으면 더 강력하지만, 그렇지 않아야 합니다):
$ awk -v h="$(hostname -i)" 'BEGIN{FS=OFS="\""} $2=="server"{$4=h} 1' file
"server":"<the host name>",
"server_port":8388,
답변2
다음과 같은 대체 매개변수를 사용할 수 있습니다.sed -i -e "s/my_server_ip/$(hostname -i)/" txt
답변3
GNU sed를 사용하는 경우 /e
command 에서 해당 플래그를 사용할 수 있지만 s/
실행되는 명령은 전체 줄입니다.
#!/bin/sed -f
/my_server_ip/{
s//%s/
s/.*/printf '&' $(hostname -i)/e
}
이렇게 하면 다음과 같은 명령줄이 생성 printf '"server":"%s",' $(hostname -i)
되고 실행되어 관련 줄이 대체됩니다.
답변4
m=$(hostname -i)
sed -i "s/my_server_ip/$m/g" filename
"server":"192.168.1.1",
"server_port":8388,