sed를 사용하여 특정 위치에 문자가 포함된 문자열 바꾸기

sed를 사용하여 특정 위치에 문자가 포함된 문자열 바꾸기

다음과 같이 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는 +문자 그대로 더하기 기호입니다. 따라서 뒤에 더하기 기호( )가 오는 .+모든 문자가 일치됩니다..

당신은 뭔가 다른 것을 원합니다: 당신은 .+일치 하고 싶습니다하나 이상.임의의 문자와 일치하고 이를 +나타내는 임의의 문자하나 이상. 이것을 얻으려면 당신이 필요합니다확장 정규식(오히려). -Esed에게 ERE를 사용하라고 지시하세요.

관련 정보