在grep中使用范围

时间:2011-04-07 08:43:05

标签: sed awk grep

以下命令按预期工作。

grep -B3 'Max_value: 127' proc_*.*

但是我需要比较最大值的数量并找出它是否介于127和200之间。

grep -B3 'Max_value: (>127 and <200)' proc_*.*

4 个答案:

答案 0 :(得分:3)

grep -B3 -E '^Max_value: (12[789]|1[3-9][0-9]|200)$' proc_*.*

-E使用扩展模式,允许在不转义的情况下进行交替。否则:

grep -B3 '^Max_value: \(12[89]\|1[3-9][0-9]\)$' proc_*.*

答案 1 :(得分:1)

使用awk完成任务。原因是,比手动输入字符类更容易比较数字。如果您需要检查更广泛的范围,该怎么办?

$ cat file
0
1
2
3
Max_value: 127
a
b
c
d
Max_value: 130
blah1
blah2
blah3
blah4
Max_value: 200
Z
Y
W
X
Max_value: 2001

$ awk -F":" '{a[NR%3]=$0} /Max_value/&&$2>=127&&$2<=200 {for(i=NR+1;i<=NR+3;i++)print a[i%3] }' file
2
3
Max_value: 127
c
d
Max_value: 130
blah3
blah4
Max_value: 200

答案 2 :(得分:0)

我打赌你在这种情况下使用awk会更好,但是因为你要求使用grep解决方案:

$ cat values.txt 
Max_value: 123
Max_value: 600
Max_value: 126
Max_value: 128
Max_value: 130
Max_value: 111
Max_value: 199
Max_value: 200
Max_value: 155
Max_value: 250
$ grep -E "Max_value: (12[89]|1[3-9][0-9])" values.txt 
Max_value: 128
Max_value: 130
Max_value: 199
Max_value: 155

答案 3 :(得分:0)

grep 'Max_value:' proc_*.* | awk ' $2 ~ /[0-9]{3}$/ && $2 > 127 && $2 < 200 '

编辑:添加检查(3位数字)$。