如果配置文件中 proxy_pass
的格式固定为 proxy_pass http://IP:9099;
(协议和端口固定),并且需要提取所有出现的 IP 地址,可以使用以下方法:
方法1:grep
+ cut
(最简单)
grep -o 'proxy_pass http://[0-9.]\+:9099;' 文件名 | cut -d '/' -f3 | cut -d ':' -f1
说明:
grep -o
:精确匹配proxy_pass http://IP:9099;
格式的行。
- 第一个
cut -d '/' -f3
:以/
为分隔符,取第3段(即10.19.29.235:9099;
)。
- 第二个
cut -d ':' -f1
:以:
为分隔符,取第1段(即 IP)。
方法2:直接使用 awk
awk '/proxy_pass/{split($2, a, "[/:]"); print a[3]}' 文件名
说明:
split($2, a, "[/:]")
:将第二个字段(如http://10.19.29.235:9099;
)按/
或:
分割到数组a
,IP 位于a[3]
。
方法3:通用正则提取(支持多文件)
grep -ho 'proxy_pass http://[0-9.]\+:9099;' *.conf | sed 's/.*\/\/\([0-9.]\+\):.*/\1/'
说明:
-h
:禁止输出文件名(多文件时默认会显示文件名)。
- 正则分组提取:通过
sed + \( \)
捕获 IP。
示例输出
假设配置文件内容如下:
server {
proxy_pass http://10.19.29.235:9099;
proxy_pass http://192.168.1.100:9099;
}
运行命令后输出:
10.19.29.235
192.168.1.100
注意事项
- 严格匹配格式:确保所有行格式均为
proxy_pass http://IP:9099;
,否则需调整正则。
- 多文件处理:替换
*.conf
为实际文件名或通配符(如/etc/nginx/*.conf
)。
内容由零声教学AI助手提供,问题来源于学员提问