次のように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は文字通りプラス+
記号です。したがって、後にプラス記号()が続く.+
すべての文字が一致します。.
あなたは何か他のものが欲しい:あなたは.+
一致したいです1つ以上.
任意の文字と一致し、それを+
表す任意の文字1つ以上。これを得るには必要です拡張正規表現(むしろ)。 -E
sedにEREを使用するように指示します。