sh/bash/dash/ksh/zsh等Shell脚本
-
cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
#1
帖子
由 cnkilior » 2008-08-20 12:08
代码: 全选
echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\.\|[1-9][0-9]\.\|2[0-5][0-5]\.\|1[0-9]\{2\}\.\)\([0-9]\{1\}\.\|[1-9][0-9]\.\|2[0-5][0-5]\.\|1[0-9]\{2\}\.\)\([0-9]\{1\}\.\|[1-9][0-9]\.\|2[0-5][0-5]\.\|1[0-9]\{2\}\.\)\([1-9]\{1\}$\|[1-9][0-9]$\|2[0-5][0-5]$\|1[0-9]\{2\}$\)/Y/p'
帮忙优化一下也非常感谢!
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#2
帖子
由 eexpress » 2008-08-20 12:22
要是能这样嵌套才爽。没写出。
"[[0-9]\{1,3\}\.*]\{4\}"
原始的是这样。
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
● 鸣学
-
cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
#4
帖子
由 cnkilior » 2008-08-20 12:35
代码: 全选
echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)$/Y/p'
稍微改了一下!
-
ychristian
- 帖子: 47
- 注册时间: 2007-07-17 14:36
#5
帖子
由 ychristian » 2008-08-21 9:15
代码: 全选
echo "192.168.0.1"| egrep [0-9]\{1,3\}\.*\{3\}[0-9]\{1,3\}$
这个怎么样?
-
ychristian
- 帖子: 47
- 注册时间: 2007-07-17 14:36
#6
帖子
由 ychristian » 2008-08-21 9:17
cnkilior 写了:代码: 全选
echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)$/Y/p'
稍微改了一下!
你们还牵扯到的问题阿.我觉得不应该在匹配的地方来做ip地址的检查
应该在匹配完毕之后,单独的检查范围.
-
cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
#12
帖子
由 cnkilior » 2008-08-21 10:15
ychristian 写了:cnkilior 写了:代码: 全选
echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)$/Y/p'
稍微改了一下!
你们还牵扯到的问题阿.我觉得不应该在匹配的地方来做ip地址的检查
应该在匹配完毕之后,单独的检查范围.
我看过这样实现的一个例子(是我现在公司正在用的代码)。大概用了4个角本函数来实现。相当复杂,大概有50行。因为是在嵌入式设备上使用的,太费cpu了,就产生这样的想法!
-
bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
-
联系:
#13
帖子
由 bones7456 » 2008-08-21 10:15
$ ping -b 0.0.0.0
PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.058 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.026 ms
-
cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
#14
帖子
由 cnkilior » 2008-08-21 12:40
bones7456 写了:$ ping -b 0.0.0.0
PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.058 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.026 ms
恩这个是合法IP
唯一一个0开头的合法IP。
接前面的,公司以前用的角本也把它人为的处理为非法IP
-
cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
#15
帖子
由 cnkilior » 2008-08-21 12:44
还有几个非法IP被包含进去了
以0结尾的IP地址也是非法的。
代码: 全选
echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)$/Y/p'
巧合的是我的代码貌似正确的。。
------
谁能告诉我0结尾的IP地址是不是合法的IP地址?
我这里PING发神经了,忽然又能发包了!
------
这是个很奇怪的IP,貌似代表网关GATEWAY!
上次由
cnkilior 在 2008-08-21 13:39,总共编辑 2 次。