【发布时间】:2021-09-05 22:10:28
【问题描述】:
我正在开发一个 bash 脚本,该脚本可以将 nginx 位置块添加到采用 URL 的文件中。为防止重复,此脚本也会在已存在的情况下将其删除。
为了删除已经存在的块,我制作了下面的正则表达式。
^location\s\/${URLGOESHERE} {[\s\S]*?(?=\n{2,})$
正则表达式需要像这样匹配整个多行块:
location /URLGOESHERE {
try_files $uri /URLGOESHERE/index.php?$query_string;
}
我希望正则表达式匹配块内的任何内容,直到右括号} 文件内将有多个块
例如
location /URL1HERE {
expires 7d;
try_files $uri /URLGOESHERE/index.php?$query_string;
allow all;
Etc....
}
location /URL2HERE {
try_files $uri /URLGOESHERE/index.php?$query_string;
}
location /URL3HERE {
try_files $uri /URLGOESHERE/index.php?$query_string;
}
location /URL4HERE {
expires 7d;
try_files $uri /URLGOESHERE/index.php?$query_string;
allow all;
Etc....
}
我制作的正则表达式有效,但前提是块前后有空行。因此,对于我的正则表达式 URL2,pcgrep 找不到 3(之前或之后没有换行符)和 4(文件末尾没有换行符)
我想知道是否可以使正则表达式完全匹配块而不需要这些空行。
【问题讨论】:
标签: regex unix-text-processing