이제 sed를 사용하여 파일의 URL을 바꾸고 싶습니다. 원본 파일은 다음과 같습니다.
server {
listen 80;
server_name localhost;
location /api/test {
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;
client_max_body_size 10M;
client_body_buffer_size 100M;
proxy_pass:www.baidu.com
}
location /api/demo {
proxy_connect_timeout 3000;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
send_timeout 3000;
client_max_body_size 10M;
client_body_buffer_size 100M;
proxy_pass:www.google.com
}
}
대체 쉘 스크립트는 다음과 같습니다.
#!/usr/bin/env bash
set -u
set -e
set -x
echo "please input url1:"
read URL1
echo "$URL1"
echo "plase input url2:"
read URL2
echo "$URL2"
sed -E -in-place "12s/.*proxy\_pass.*/proxy\_pass:$URL1/" nginx.conf
sed -E -in-place "22s/.*proxy\_pass.*/proxy\_pass:$URL2/" nginx.conf
이 스크립트는 잘 작동하지만, 이와 같은 형식으로 http url을 입력하면 http::/www.google.com
스크립트에 다음 오류가 표시됩니다.
+ sed -E -in-place '12s?.*proxy\_pass.*/proxy\_pass:http::/www.google.com?' nginx.conf
sed: 1: "12s?.*proxy\_pass.*/pro ...": unterminated substitute in regular expression
sed가 특수 문자와 작동하도록 하려면 어떻게 해야 합니까?
답변1
s
대신 명령에 다른 구분 기호를 사용할 수 있습니다 /
.
sed -E -in-place "12s|.*proxy_pass.*|proxy_pass:$URL1|" nginx.conf
URL에는 가 포함될 수 없다고 가정합니다 |
. URL에는 &
유효한 URL 문자이지만 sed
대체 시 특별한 의미가 있는 가 포함될 수 없습니다.
또한 밑줄 앞의 백슬래시는 정의되지 않았으며 일부 구현에서는 이상한 결과를 생성 \_
할 수 있으므로 제거했습니다.sed
마지막으로 URL에 세미콜론이 포함될 필요가 없도록 대체 항목의 URL 뒤에 세미콜론을 추가하는 것을 고려할 수 있습니다.
sed -E -in-place "12s|.*proxy_pass.*|proxy_pass:$URL1;|" nginx.conf