如何在mkdir命令中去除斜杠?实现带CIDR后缀IP的文件夹创建
提取CIDR格式IP中的地址部分创建文件夹
有几种简单的方法可以处理这个需求,不用纠结复杂的sed写法,甚至可以用bash原生的参数扩展搞定:
方法1:Bash参数扩展(推荐,无需外部命令)
利用bash的参数扩展功能,直接从输入参数里截掉/及后面的内容:
#!/bin/bash # 先检查用户是否传入了参数 if [ $# -eq 0 ]; then echo "请传入目标IP(支持CIDR格式,比如192.168.1.0/24)" exit 1 fi # 提取纯IP部分:${参数%%/*} 表示从最后一个/开始删除后面所有内容 target_ip="${1%%/*}" # 执行nmap扫描(用原始的CIDR参数) nmap "$1" # 创建文件夹,用提取出的纯IP命名 mkdir -p "$target_ip"
这里的${1%%/*}是核心:%%是最长匹配删除模式,/*匹配从第一个/到行尾的所有字符,不管后面是/24还是/16,都会被干净地截掉。
方法2:用cut命令切割
如果习惯用文本处理工具,cut命令也能快速搞定:
target_ip=$(echo "$1" | cut -d '/' -f 1)
-d '/'指定分隔符为/,-f 1表示取第一个分隔后的字段。
方法3:用sed实现(解决你之前的sed写法问题)
如果一定要用sed,正确的写法是匹配/及后面的内容并替换为空:
target_ip=$(echo "$1" | sed 's/\/.*$//')
解释:s/\/.*$//是sed替换规则,\/转义斜杠,.*$匹配从/开始到行尾的所有字符,替换成空字符串,就得到了前面的纯IP。
三种方法都能实现需求,优先用方法1,因为不需要调用外部命令,脚本执行效率更高。
内容的提问来源于stack exchange,提问作者Oded
相关产品推荐
相关产品推荐

