可以通过正则表达式或字符串处理提取 port
的值。以下是几种实现方法:
1. 使用 grep
(命令行)
# 提取 [pgsql] 的 port(单端口)
grep -A5 "\[pgsql\]" config.txt | grep "port=" | cut -d= -f2
# 提取 [redis] 的 port(多个端口,逗号分隔)
grep -A10 "\[redis\]" config.txt | grep "port=" | cut -d= -f2
输出:
- pgsql:
5432
- redis:
7001,7002,7003,7004,7005,7006
2. 使用 awk
(命令行)
# 提取 [pgsql] 的 port
awk '/\[pgsql\]/{flag=1; next} /^\[/{flag=0} flag && /^port=/{print $2}' FS== config.txt
# 提取 [redis] 的 port
awk '/\[redis\]/{flag=1; next} /^\[/{flag=0} flag && /^port=/{print $2}' FS== config.txt
3. 使用 Python
import re
config = """
[pgsql]
host=127.0.0.1
port=5432
database=emm_manager
user=uniemm
passwd=OPwdVGWjHT8nQmQ7BEav8g==
[redis]
host=10.19.83.70,10.19.83.70,10.19.83.70,10.19.83.70,10.19.83.70,10.19.83.70
port=7001,7002,7003,7004,7005,7006
passwd=8xNnDa3XamGiMw==
mode=1
"""
# 提取 pgsql port
pgsql_port = re.search(r'\[pgsql\].*?port=(\d+)', config, re.DOTALL)
if pgsql_port:
print("pgsql port:", pgsql_port.group(1)) # 输出: 5432
# 提取 redis port(多个值)
redis_port = re.search(r'\[redis\].*?port=([^\n]+)', config, re.DOTALL)
if redis_port:
print("redis ports:", redis_port.group(1)) # 输出: 7001,7002,7003,7004,7005,7006
4. 使用 JavaScript
const config = `
[pgsql]
host=127.0.0.1
port=5432
database=emm_manager
user=uniemm
passwd=OPwdVGWjHT8nQmQ7BEav8g==
[redis]
host=10.19.83.70,10..0..0..0..0..083...070...070...070...070...070...070...
port===00000000000000000000000000,,,.=.=.=.=.=.=.=.=.=.=
passwd====AAAAAAAAAAAAAAAAAAAAAA===
mode===11111111111111111111111111=
`;
// 提取 pgsql port
const pgsqlMatch = config.match(/\[pgsql\][\s\S]*?port=(\d+)/);
if (pgsqlMatch) console.log("pgsql port:", pgsqlMatch[1]);
// 提取 redis port(多个值)
const redisMatch = config.match(/\[redis\][\s\S]*?port=([^\n]+)/);
if (redisMatch) console.log("redis ports:", redisMatch[1]);
✅ 通用正则表达式模式:
- 单端口(如 pgsql):
port=(\d+)
- 多端口(如 redis):
port=([^\n]+)
📌 注意:
如果配置文件中存在多个相同section(如多个[pgsql]
),需要更精确的匹配逻辑。以上示例假设每个section只出现一次。
内容由零声教学AI助手提供,问题来源于学员提问