私は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