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;
.
的行下
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;
的行,找到后执行大括号中的语句。
n
打印当前模式 space 并读入下一行。我们这样做八次。这样就有跳下八行的效果了
s/^/ location ^~ \/blog {}\n/
在第八行进行更改。
我正在尝试使用 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;
.
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;
的行,找到后执行大括号中的语句。
n
打印当前模式 space 并读入下一行。我们这样做八次。这样就有跳下八行的效果了
s/^/ location ^~ \/blog {}\n/
在第八行进行更改。