You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则从WireGuard配置文件提取指定用户的AllowedIP?

解决grep提取WireGuard用户AllowedIP的问题

你的正则在regex101可用但grep失效,核心原因是grep默认不支持Perl正则的(?s)(DOTALL模式,让.匹配换行),且默认逐行处理文本,跨多行匹配需要特殊配置。以下是两种可行方案:

方案1:使用GNU grep(Linux默认)

启用Perl兼容正则模式(-P),调整正则实现跨多行匹配并只提取IP:

grep -oP '# BEGIN ANSIBLE MANAGED BLOCK name1.lastname1\s*\n.*?AllowedIPs = \K.*?(?=\s*\n# END)' /path/to/your/wireguard.conf

参数说明:

  • -o:仅输出匹配的目标内容
  • -P:启用Perl兼容正则语法
  • \K:丢弃之前匹配的所有内容,只保留后续匹配部分
  • (?=...):正向预查,确保匹配到# END前的IP内容

方案2:使用awk(跨平台通用)

awk更适合处理结构化的区块文本,逻辑更清晰且无需依赖特定grep版本:

awk -v target_user="name1.lastname1" '
/# BEGIN ANSIBLE MANAGED BLOCK/ && $NF == target_user { in_block=1 }
in_block && /AllowedIPs =/ { print $3; exit }
/# END ANSIBLE MANAGED BLOCK/ && $NF == target_user { in_block=0 }
' /path/to/your/wireguard.conf

逻辑说明:

  • 通过变量target_user指定要查询的用户名
  • 匹配到目标用户的BEGIN区块时,标记进入该区块
  • 在区块内匹配到AllowedIPs行时,打印第三个字段(即IP)并退出(避免多余匹配)
  • 匹配到目标用户的END区块时,标记退出区块

内容的提问来源于stack exchange,提问作者MKornprobst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:30:13