2 回答
TA贡献1854条经验 获得超8个赞
由于配置文件可能在这一节中包含更多内容,因此在这里要考虑错误匹配。特别是,匹配^#\s*}并希望达到最佳效果可能会导致注释掉文件中其他位置完全不相关的行。
因此,在取消注释之前,我将收集属于该部分的所有行。我正在考虑这样的思路:编写代码
/^#\s*location ~ \\\.php\$ {/ {
:loop
/\n#\s*}/! {
N
b loop
}
s/^#//
s@#\(\s*include snippets/fastcgi-php\.conf;\)@\1@
s@#\(\s*fastcgi_pass unix:/var/run/php/php7\.\)0\(-fpm\.sock;\)@\11\2@
s/\n#\(\s*}\)/\n\1/
}
进入文件uncomment.sed,然后说,然后运行
sed -f uncomment.sed /etc/nginx/sites-available/default
如果结果令人满意,请添加该-i选项以进行编辑。
该代码的工作方式如下:
/^#\s*location ~ \\\.php\$ {/ { # starting with the first line of the section
# (regex taken from the question):
:loop # jump label for looping
/\n#\s*}/! { # Until the last line is in the pattern space
N # fetch the next line from input, append it
b loop # then loop
}
# At this point, we have the whole section in the pattern space.
# Time to remove the comments.
# There's a # at the beginning of the pattern space; remove it. This
# uncomments the first line.
s/^#//
# The middle two are taken from the question, except I'm using @ as
# a separator so I don't have to escape all those slashes and captures
# to avoid repeating myself.
s@#\(\s*include snippets/fastcgi-php\.conf;\)@\1@
s@#\(\s*fastcgi_pass unix:/var/run/php/php7\.\)0\(-fpm\.sock;\)@\11\2@
# Uncomment the last line. Note that we can't use ^ here because that
# refers to the start of the pattern space. However, because of the
# looping construct above, we know there's only one # directly after
# a newline followed by \s*} in it, and that's the comment sign before
# the last line. So remove that, and we're done.
s/\n#\(\s*}\)/\n\1/
}
TA贡献1891条经验 获得超3个赞
这是一个gnu-awk带有自定义选项的替代解决方案RS:
awk -v RS='# location [^{]*{[^}]*}\n' 'RT {
RT = gensub(/(^|\n)[[:blank:]]*#([[:blank:]]*(location|include|fastcgi_pass unix|}))/, "\\1\\2", "g", RT)
RT = gensub(/(php7\.)0/, "\\11", "1", RT)
}
{ORS=RT} 1' file
...
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
...
- 2 回答
- 0 关注
- 442 浏览
添加回答
举报