如何在sed中调用$IP变量注释指定规则且避免重写整个文件?
实现方法
核心思路
通过sed的原地编辑功能,结合变量匹配目标IP与SSHBRUTE规则行,直接在行首添加注释,无需重写整个文件。
具体步骤
确保正确获取目标IP
先通过筛选命令把需要处理的IP存入$IP变量,根据你的规则文件格式调整列数:# 提取含2228端口/SSHBRUTE且排除10.10.10.10的IP,假设IP在第3列 IP=$(grep -E '2228|SSHBRUTE' rules.conf | grep -v '10.10.10.10' | awk '{print $3}')处理多IP场景(可选)
如果$IP包含多个空格分隔的IP,转成sed能识别的正则匹配模式:IP_PATTERN=$(echo "$IP" | tr ' ' '|')用sed添加注释
- 单IP情况:
# 匹配含目标IP和SSHBRUTE的行,行首加# sed -i "/$IP.*SSHBRUTE/s/^/#/" rules.conf - 多IP情况:
# 匹配任意目标IP和SSHBRUTE的行,行首加# sed -i "/\($IP_PATTERN\).*SSHBRUTE/s/^/#/" rules.conf
- 单IP情况:
关键细节
- 转义IP中的点号:
sed会把.当作任意字符,所以需要转义IP里的.,可以在提取IP时处理:IP=$(grep -E '2228|SSHBRUTE' rules.conf | grep -v '10.10.10.10' | awk '{print $3}' | sed 's/\./\\./g') - 跨平台兼容:如果是BSD系统(比如macOS),
sed的-i参数需要加空字符串:sed -i '' "/$IP.*SSHBRUTE/s/^/#/" rules.conf
内容的提问来源于stack exchange,提问作者WhoAmI
相关产品推荐
相关产品推荐

