다음과 같이 nginx.conf 파일이 있습니다.
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
worker_processes 1;
events {
worker_connections 1024;
}
stream {
upstream redis {
server 34.73.56.224:6379;
}
server {
listen 8888 so_keepalive=on;
proxy_pass redis;
}
}
스크립트를 실행하면 bash swap.sh 400
현재 있는 주소가 34.73.56.224
로 대체되도록 스크립트를 작성하려고 합니다 400
. 그러나 항상 이 숫자는 아닙니다. 다른 주소이거나 redis라고 표시될 수 있습니다. . 참고: :6379
스크립트를 실행한 후에도 여전히 존재해야 합니다. 이것이 내가 지금 가지고 있는 것입니다:
#!/usr/bin/env bash
PARAM=$1
sed -i'.conf' "s/server .+:/server $PARAM:/" nginx.conf
그러나 이것이 작동하지 않는 이유는 정규식 명령을 올바르게 사용하지 않기 때문이라고 생각합니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
답변1
노력하다:
sed -E -i'.conf' "s/server .+:/server $PARAM:/" nginx.conf
기본적으로 sed는 다음을 사용합니다.기본 정규식(갈아 바수다). BRE에서 a는 +
문자 그대로 더하기 기호입니다. 따라서 뒤에 더하기 기호( )가 오는 .+
모든 문자가 일치됩니다..
당신은 뭔가 다른 것을 원합니다: 당신은 .+
일치 하고 싶습니다하나 이상.
임의의 문자와 일치하고 이를 +
나타내는 임의의 문자하나 이상. 이것을 얻으려면 당신이 필요합니다확장 정규식(오히려). -E
sed에게 ERE를 사용하라고 지시하세요.