
私のNGINX設定ファイルに次のブロックがあります
server {
listen 80;
listen [::]:80;
server_name _;
root /web/default/wwwroot/;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
ブロック全体を削除したいです。次のsed / regexコマンドを試しました。
sed -ri '/server,/.*\}/d' /etc/nginx/nginx.conf
ただし、見つかった最初の閉じた括弧を削除してセクションを残します。
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
一致する閉じ括弧と一致させ、ブロック全体を削除するにはどうすればよいですか?
ありがとうございます。
答え1
アドレスを使用して、パターン1とパターン2の間のすべての行を一致させることができますsed '/pattern1/,/pattern2/'
。
あなたの場合、次から始まる行からserver {
始まる行まですべてを削除すると、}
次のように書かれます。
sed '/^server {/,/^ }/d' file
答え2
私が知る限り、nginxの設定は一般的な言語ではありません。正規表現を使用して解析する保証はないため、まったく選択のツールではない可能sed
性があります。あなたの例ですべてのケースで動作するようにするには、{
コメント、文字列、グローバル変数ではなく開始をカウントします}
。server {
ぼやけた絵の答えはあなたのためですはい、インデントに頼ることができるからです。各ファイルの内容がまったく同じであることを保証できますか?そうでない場合は、気付かずにサーバーを誤って設定したいと思いますか?
nginx設定言語を実際に「理解」し、解析し、結果を修正するためのツールを使用することをお勧めします。
Nginx会社は独自crossplane
今すぐ正確にそのような目的のために。 Pythonを知っている場合はモジュールを使用できますが(使用することをお勧めします)、シェルに滞在したい場合は次のようにします。
crossplane parse
nginx設定ファイルをJSONに変換します。crossplane build
その逆は本当です。jq
JSONを理解して編集できます。だから、
crossplane parse /etc/nginx/nginx.conf | \
jq 'jq commands that do exactly what you want | \
crossplane build --stdout - > newconfig.conf