sed는 일치하는 항목 뒤에 새 줄을 포함하는 줄을 추가합니다.

sed는 일치하는 항목 뒤에 새 줄을 포함하는 줄을 추가합니다.

다음 블록이 있습니다.

  location /api {
    proxy_pass http://localhost:8080;
  }

  location /oauth2 {
    proxy_pass http://localhost:8080;
  }

  location /login {
    proxy_pass http://localhost:8080;
  }

Proxy_pass 뒤에 새 줄을 추가하고 싶지만 /api 섹션에만 추가하고 싶습니다.

  location /api {
    proxy_pass http://localhost:8080;
    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
  }

  location /oauth2 {
    proxy_pass http://localhost:8080;
  }

  location /login {
    proxy_pass http://localhost:8080;
  }

정규식을 올바르게 얻는 데 어려움을 겪고 있습니다.

약간 성공한 시도:

sed -re '/[[:space:]]proxy_pass http:\/\/localhost:8080;/a\    proxy_read_timeout 300;' nginx.con

^^^ 이것은 분명히 Proxy_pass 지시문을 포함하는 모든 줄에 read_timeout을 추가하므로 \r, \n, \r\n 또는 [[:space:]]+의 변형을 처음에 추가하려고 시도했습니다. 운이 없었습니다.

다음과 같이 다른 방법으로 시도해 보았습니다.

sed '/location \/api {\n\s+proxy_pass.*/a            proxy_read_timeout 300' nginx.conf

하지만 거기에서도 실패

누구든지 유용한 팁을 빌려줄 수 있나요?

답변1

도전이 받아들여졌습니다.

다음 명령을 시도해 보세요.

sed 'N;/location \/api.*proxy_pass http:\/\/localhost:8080;/a \    proxy_read_timeout 300;\n    proxy_connect_timeout 300;\n    proxy_send_timeout 300;\n' nginx.conf

마법의 키워드는 다음과 같습니다.

  • sed 요청 시작 부분의 'N'은 sed가 여러 줄과 일치하도록 지시합니다.
  • sed에게 일치 항목 뒤에 새 줄을 추가하라고 지시하는 '/a'입니다.

그리고 들여쓰기에 맞게 적절한 공백을 추가하세요 :)

편집: 두 번째 제안.

sed 'N;/location \/api.*proxy.*$/a \    proxy_read_timeout 300;\n    proxy_connect_timeout 300;\n    proxy_send_timeout 300;\n' nginx

관련 정보