我想在nginx文件的配置中添加其他文本行。我写了一个正则表达式HERE,尽管它不适用于sed。脚本应该是什么样的,它将在找到的文本之后添加文本?
我正在尝试使用此命令,但没有成功:
sed '/location \/ {(\n|.)*?[a-zA-Z0-9 \n;#._\/=$,]*}/r nginxphp.txt' /etc/nginx/sites-available/default
此问题中最重要的是 sed语法中的正则表达式应如何显示?
或以另一种方式注入一些行到debian中的文件(在我的示例中) 我想在/ etc / nginx / sites-available / default中进行更改:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules;
}
HERE SOME TEXT
答案 0 :(得分:2)
使用sed:
sed '/location \/ {/!b;:A;N;/}/!bA;r nginxphp.txt' /etc/nginx/sites-available/default
答案 1 :(得分:1)
我建议使用此gnu awk
:
awk -i inplace -v RS='\n[[:blank:]]*location / {[^}]*}' '1
RT {
print RT
if ((getline < "nginxphp.txt") > 0)
print
}' /etc/nginx/sites-available/default
RS='\n[[:blank:]]*location / {[^}]*}'
与完整的location
块匹配,并使其成为记录分隔符。print RT
打印此匹配的文本getline
函数读取内存中的nginxphp.txt
,然后使用print
语句进行打印。答案 2 :(得分:1)
这可能就是您想要的,使用GNU awk进行多字符RS和RT:
awk '
NR==FNR { new=$0; next }
{ print $0 (RT ? RT new : "") }
' \
ORS="" \
RS='^$' nginxphp.txt \
RS='(^|\n)[[:blank:]]*location */ *{[^}]*} *\n' /etc/nginx/sites-available/default