我试图在haproxy配置文件中找到一行:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 32768
tune.maxaccept -1
chroot /var/lib/haproxy
daemon
stats socket /var/run/haproxy.sock mode 600 level admin
stats timeout 2m
timeout http-request 5000
defaults
log global
mode http
option httplog
option dontlognull
retries 5
option redispatch
maxconn 16384
timeout connect 7s
timeout client 500s
timeout server 500s
timeout http-request 7000
timeout client-fin 30s
timeout tunnel 1h
什么是匹配timeout http-request 5000
行的正则表达式,但仅在global
部分。此外,我们需要确保排除#
。
4条答案
按热度按时间mefy6pfw1#
你可以使用模式
使用多行修改器
m
。这应该支持注解行(使用#
),并且不像所有其他答案那样依赖于defaults
部分在globals
部分之后。文本
timeout http-request 5000
将位于捕获组1中。Regex101 demo.
说明:
zqdjd7g92#
看看这个regex:https://regex101.com/r/sI5qY6/1
它给出以下匹配:
lsmepo6l3#
这一个可能会做得非常快,只有在66个步骤的情况下,超时HTTP-Request 5000是在全球的最后
Debuggex Demo
https://regex101.com/r/yW9xZ6/2
如果超时HTTP-Request 5000可以放置在全局组中任何位置,则
https://regex101.com/r/yW9xZ6/3
pdkcd3nj4#
awk
在一个块中搜索很方便。给予这个:
-F "#"
定义#
作为字段分隔符,所以$1
是当前行#
之前的字符串。'/^global/,/^defaults/ {
对于global
和defaults
之间定义的块内的所有行,执行{}
之间的操作。if ($1 ~ /timeout *http-request/
如果#
之前的字符串(如果有)包含属性timeout *http-request
,则为true。