ฉันจะค้นหาและแก้ไขหลายบรรทัดและแทนที่ด้วย sed บน nginx / sites-available / default


0

ฉันต้องการยกเลิกการคอมเม้นต์ข้อความที่มีอยู่ในไฟล์เริ่มต้น

ไฟล์ในเว็บไซต์นี้คล้ายกับไฟล์เริ่มต้นของฉันมาก

https://salsa.debian.org/nginx-team/nginx/blob/master/debian/conf/sites-available/default

ความแตกต่างคือเพราะฉันใช้ใบรับรอง https ฉันมีในไฟล์เริ่มต้นส่วนอื่นของเซิร์ฟเวอร์ {} และภายในนั้นฉันมีอีกส่วนหนึ่งของส่วนต่อไปนี้ ... ดังนั้นฉันต้องค้นหาในส่วนเซิร์ฟเวอร์ {} แรกและเพิ่ม info.php ไปยังบรรทัดที่มีลูกศรที่ฉันสร้างขึ้นเพื่อแสดงให้เห็นถึงบรรทัดที่ฉันต้องการเพิ่ม info.php

เซิร์ฟเวอร์ {

    # Add index.php to the list if you are using PHP
    --> index index.html index.htm index.nginx-debian.html;

    # pass PHP scripts to FastCGI server
    #
    #location ~ \.php$ {
            #include snippets/fastcgi-php.conf;
    #
    #       # With php-fpm (or other unix sockets):
            #fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    #       # With php-cgi (or other tcp sockets):
            #fastcgi_pass 127.0.0.1:9000;
            #include fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
            #deny all;
    #}

    # Virtual Host configuration for example.com
    #
    # You can move that to a different file under sites-available/ and symlink that
    # to sites-enabled/ to enable it.
    #
    #server {
    #       listen someport;
    #       listen [::]:someport;
    #
    #       server_name example.com;
    #
    #       root /var/www/example.com;
    #       index index.html;
    #
    #       location / {
    #               try_files $uri $uri/ =404;
    #       }
    #}

}

จากนั้นค้นหาที่เซิร์ฟเวอร์ {} ส่วนถัดไปและในส่วนนี้ฉันต้องเปลี่ยน:

เซิร์ฟเวอร์ {

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name mydomainname.com; # managed by Certbot

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
    }

    # pass PHP scripts to FastCGI server
    #
    #location ~ \.php$ {
            #include snippets/fastcgi-php.conf;
    #
    #       # With php-fpm (or other unix sockets):
            #fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    #       # With php-cgi (or other tcp sockets):
            #fastcgi_pass 127.0.0.1:9000;
            #include fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
            #deny all;
    #}
    listen [::]:someport ssl ipv6only=on; # managed by Certbot
    listen someport ssl; # managed by Certbot

}

สำหรับสิ่งนี้:

เซิร์ฟเวอร์ {

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;
    server_name mydomainname.com; # managed by Certbot

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;

    }
    # pass PHP scripts to FastCGI server
    #
    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
    #
    #       # With php-fpm (or other unix sockets):
            fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    #       # With php-cgi (or other tcp sockets):
            #fastcgi_pass 127.0.0.1:9000;
            include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
            deny all;
    }
    listen [::]:someport ssl ipv6only=on; # managed by Certbot
    listen someport ssl; # managed by Certbot

}

ฉันลองใช้ sed มาแล้ว แต่ฉันไม่ค่อยชอบในไวยากรณ์ของมันเพราะฉันได้รับข้อผิดพลาดทุกอย่างเกี่ยวกับตัวละครพิเศษในนั้นบางคนสามารถช่วยฉันได้ไหม


ไม่สามารถใส่ทั้งสองไฟล์ตามที่คุณต้องการในระบบแล้วสลับระหว่างไฟล์ได้หรือไม่? sed ไม่ดีสำหรับการเปลี่ยนแปลงแบบนี้
Rinzwind

@ Rinzwind ขอบคุณที่ตอบกลับดังนั้นคุณแนะนำอะไร? ฉันเปิดกว้างสำหรับโซลูชันอื่น ...
Shahar Alaluf

เป็นไฟล์เดียวกัน แต่มี 2 เซิร์ฟเวอร์ {} ส่วนในนั้น ...
Shahar Alaluf

@ Rinzwind บางทีคุณอาจมีคำตอบสำหรับเรื่องนี้ ... สมมุติว่าฉันต้องการเปลี่ยนสตริงทั้งหมดในไฟล์ที่มีสตริงนี้: try_files $ uri $ uri / = 404; และเปลี่ยนเป็น: try_files $ uri $ uri / /index.php?$args; ด้วย sed ฉันสับสนรูปแบบในยูนิกซ์มันทำให้ฉันถั่ว ...
Shahar Alaluf

คำตอบ:


0

จริง ๆ คุณไม่สามารถ ...

sed สามารถจับคู่รูปแบบและแก้ไขข้อมูลของคุณได้ แต่จริงๆแล้วไม่สามารถเห็นความแตกต่างระหว่างความคิดเห็นและบรรทัดคำสั่ง

เนื่องจากมันเป็นไฟล์ขนาดเล็กมันจึงง่ายต่อการเปิดในตัวแก้ไขและทำการแก้ไขด้วยตนเอง - ใช้ vi, nano, gedit หรืออะไรก็ตามที่คุณชอบ


ohh รู้สึกไม่ดีเพราะฉันต้องการสร้างสคริปต์อัตโนมัติเพื่อแก้ไขไฟล์นี้โดยไม่ต้องมีคนเข้ามาเกี่ยวข้องมันเป็นตัวเลือกเดียวหรือไม่?
Shahar Alaluf

สมมติว่าฉันต้องการเปลี่ยนสตริงทั้งหมดภายในไฟล์นี้ที่มีสตริงนี้: try_files $ uri $ uri / = 404; และเปลี่ยนเป็น: try_files $ uri $ uri / /index.php?$args; ฉันสับสนรูปแบบในยูนิกซ์มันทำให้ฉันถั่ว ...
Shahar Alaluf

@ShaharAlaluf นั่นเป็นคำถามอื่น
Soren A
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.