Использование диапазона в grep - PullRequest
0 голосов
/ 07 апреля 2011

Следующая команда работает должным образом.

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

Но мне нужно сравнить число Max Value и определить, находится ли оно между 127 и 200.

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

Ответы [ 4 ]

3 голосов
/ 07 апреля 2011
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 голос
/ 09 апреля 2011

Используйте 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
0 голосов
/ 10 апреля 2011
grep 'Max_value:' proc_*.* | awk ' $2 ~ /[0-9]{3}$/ && $2 > 127 && $2 < 200 '

edit: добавление чека для (трехзначного числа) $.

0 голосов
/ 07 апреля 2011

Могу поспорить, что вам лучше использовать 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
...