簡體   English   中英

sed正則表達式匹配后跳過行

[英]skip lines after sed regular expression match

我正在嘗試使用sed編輯aws elasticbeanstalk nginx配置文件。 我想在默認位置之后插入一個新的位置塊。

為此,我要匹配上一個位置塊中的一行,然后我想跳過8行,然后插入文本。

這是我運行sed之前的樣子

upstream nodejs {
    server 127.0.0.1:8081;
    keepalive 256;
}

server {
    listen 8080;

    location / {
        proxy_pass  http://nodejs;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

這是我天真的嘗試來構建實際上不起作用的命令,而只是將新塊proxy_pass http://nodejs;在包含proxy_pass http://nodejs;的行下proxy_pass http://nodejs;

sed -i '/nodejs;/a \ location ^~ /blog {}' /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf

如何在regex標識的行之后跳過8行。 另外,也建議您使用其他方法來標識我要放置新塊的位置。

這會尋找nodejs; 並向下跳八行,然后插入location ^~ /blog {} 您沒有顯示所需的輸出,但是根據問題,我推斷這是您要查找的內容:

$ sed '/nodejs;/ {n;n;n;n;n;n;n;n;s/^/    location ^~ \/blog {}\n/}' file
upstream nodejs {
    server 127.0.0.1:8081;
    keepalive 256;
}

server {
    listen 8080;

    location / {
        proxy_pass  http://nodejs;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ^~ /blog {}
}

這個怎么運作

sed命令為:

/nodejs;/ {n;n;n;n;n;n;n;n;s/^/ location ^~ \\/blog {}\\n/}

首先查找包含nodejs;nodejs; 並在找到后執行大括號中的語句。

n打印當前模式空間並讀取下一行。 我們這樣做八次。 這具有跳下八行的效果。

s/^/ location ^~ \\/blog {}\\n/在第八行進行更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM