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

sh/bash/dash/ksh/zsh等Shell脚本
回复
mgqw
帖子: 59
注册时间: 2006-11-09 21:06
来自: 深圳

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

#1

帖子 mgqw » 2008-04-28 15:05

小菜我写一个脚本,用来判断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:
上次由 mgqw 在 2008-04-28 16:55,总共编辑 1 次。
头像
millenniumdark
论坛版主
帖子: 4159
注册时间: 2005-07-02 14:41
系统: Ubuntu 14.04 (Kylin)
联系:

#2

帖子 millenniumdark » 2008-04-28 15:49

看不懂。

建议man grep。grep的man写得还可以。
mgqw
帖子: 59
注册时间: 2006-11-09 21:06
来自: 深圳

#3

帖子 mgqw » 2008-04-28 16:54

我看了好半天man grep了就是没有找到,这样说简单点吧:
有个参数:$data
我要用grep命令统计$data参数里面含有数字和“ . ”符号的行数,如果$data只含有数字和“ . ”符号的话grep命令统计行数结果返回1行,如果有其他字符(比如字母,除 . 之外的其他符号)就返回0行,因为$data变量本身数据只有一行.
xiechy
帖子: 1074
注册时间: 2006-01-18 15:01

#4

帖子 xiechy » 2008-04-28 19:52

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
上次由 xiechy 在 2008-04-28 20:15,总共编辑 2 次。
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京

#5

帖子 aBiNg » 2008-04-28 20:10

echo $line | grep -v '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

楼主表述不清,一会儿参数,一会儿变量,一会儿数据的...
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#6

帖子 eexpress » 2008-04-28 22:12

我给你一思路。
找特定数据的重复程度入手。

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

理解下,应该有些方面你会用到。
● 鸣学
mgqw
帖子: 59
注册时间: 2006-11-09 21:06
来自: 深圳

#7

帖子 mgqw » 2008-04-29 8:44

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:
回复