nginx.conf ファイル内の単一行を複数行のコンテンツに置き換えます。

nginx.conf ファイル内の単一行を複数行のコンテンツに置き換えます。

「/etc/nginx/nginx.conf」ファイルのバックアップを作成したい

次に、ファイル内の次の行を編集します。

include /etc/nginx/sites-enabled/*;

代わりに次のように表示されます...

include /etc/nginx/sites-enabled/*;

server {
    listen 8081;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect default;
        auth_basic "Server Administration";
        auth_basic_user_file /etc/nginx/passwords;
    }
}

問題は、Linux にまだ慣れていないことです。sed を使用できると思っていましたが、新しい理解では、sed は行ごとに読み取るため、複数行のコンテンツには適していないということです。一部の文字が perl に干渉するため、perl で sed を動作させる方法がわかりません。NGINX の動作を学習しているだけで頭が疲れてしまいました... どのような助けでも大歓迎です。

私の現在のSEDコマンド....

問題なく動作するはずです。やったー!:D

sudo sed -i.bak 's/^    include \/etc\/nginx\/sites-enabled\/\*\;$/&\n  \n  server {\n      listen 8081\;\n     \n      location \/ {\n         proxy_pass http:\/\/127.0.0.1:8080\/\;\n            proxy_redirect default\;\n          auth_basic "Server Administration"\;\n          auth_basic_user_file \/etc\/nginx\/passwords\;\n    }\n}\n/' /home/pi/Public/NGINX-test/nginx.conf

答え1

sed1 行を複数行に変換できます。
以下のサンプルの「概念実証」スクリプトをご覧ください。変換された「ヒア ドキュメント」ドキュメントを出力します。

#!/bin/sh
sed 's/^include \/etc\/nginx\/sites-enabled\/\*;$/&\nYES!/' <<END
input-line:1
include /etc/nginx/sites-enabled/*;
input-line:3
include /etc/nginx/sites-enabled/*;
END

答え2

Andrzej A. Flip が提供した情報に加えて、セミコロン (;)、アスタリスク (*)、およびスラッシュ (/) 文字をエスケープする必要があります。\n は新しい行になり、.bak 拡張子で変更を行う前に -i.bak を使用してファイルのバックアップを作成します。

sudo sed -i.bak 's/^    include \/etc\/nginx\/sites-enabled\/\*\;$/&\n  \n  server {\n      listen 8081\;\n     \n      location \/ {\n         proxy_pass http:\/\/127.0.0.1:8080\/\;\n            proxy_redirect default\;\n          auth_basic "Server Administration"\;\n          auth_basic_user_file \/etc\/nginx\/passwords\;\n    }\n}\n/' /home/pi/Public/NGINX-test/nginx.conf

関連情報