分页: 1 / 1

[问题]用grep命令统计包含有规定字符的行数

发表于 : 2008-04-28 15:05
mgqw
小菜我写一个脚本,用来判断IP地址数据中是否含有非法数据:0-9和.为合法数据(如192.168.1.1),而其他字符则为非法数据。而小菜我的想法是用grep语句判断:统计不含[0-9] && . 字符的行数,如果行数为0则为合法字符,如果大于0则为非法字符,可是我查了半天grep的资料都不晓得怎么写………………
只知道像这样:db_ip_jud="$(echo "$db_ip" | grep -v -c [[:digit:]])"可是 . 符号没包括在里面
请各位大侠帮帮忙 :oops: :oops: :oops: :oops: :oops:

发表于 : 2008-04-28 15:49
millenniumdark
看不懂。

建议man grep。grep的man写得还可以。

发表于 : 2008-04-28 16:54
mgqw
我看了好半天man grep了就是没有找到,这样说简单点吧:
有个参数:$data
我要用grep命令统计$data参数里面含有数字和“ . ”符号的行数,如果$data只含有数字和“ . ”符号的话grep命令统计行数结果返回1行,如果有其他字符(比如字母,除 . 之外的其他符号)就返回0行,因为$data变量本身数据只有一行.

发表于 : 2008-04-28 19:52
xiechy
echo $data |grep -c -P '^[0-9.]*$'
空行也算合法行,不算的话把*换成+
如果确认只要IP的话可以用 echo $data |grep -c -P '^ ((([01]?[0-9])?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}(([01]?[0-9])?[0-9]|2([0-4][0-9]|5[0-5]))$ '
一行一个IP

发表于 : 2008-04-28 20:10
aBiNg
echo $line | grep -v '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

楼主表述不清,一会儿参数,一会儿变量,一会儿数据的...

发表于 : 2008-04-28 22:12
eexpress
我给你一思路。
找特定数据的重复程度入手。

cat xxx|grep xxxxxxyyyyy|sort|uniq -cd|sort -n

理解下,应该有些方面你会用到。

发表于 : 2008-04-29 8:44
mgqw
aBiNg 写了:echo $line | grep -v '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

楼主表述不清,一会儿参数,一会儿变量,一会儿数据的...
表达能力不怎么样不好意思 :oops: :oops:

就是对一行字符串进行判断, :oops: :oops:

谢谢各位大侠的帮助,小弟感激不尽 :lol: :lol: :lol: