2011-04-07 68 views
0

以下命令按預期工作。在grep中使用範圍

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

但我需要比較最大價值的數量,發現如果是-E使用擴展模式,允許交替不逃避127和200之間

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

您使用的是錯誤的工具 – 2011-04-07 08:55:57

回答

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

編輯:將支票(3位數字)$。

+0

非常有趣。 #但我得到的值如1984-10-17和17:46:07#是否可以檢查$ 2值是否爲數字? – shantanuo 2011-04-11 04:08:54

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

。否則:

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

不錯,但需要'(> 127和<200)',而不是'(> = 127和<= 200)' – Johnsyweb 2011-04-07 08:53:50

+0

@Johnsyweb,因爲指定了127作爲一個良好的輸入,首先,@ shantanuo使用_between_是_inclusive_,而不管他的代碼實際上是怎麼說的。 :) 接得好。 @shantanuo,如果你真的想要_inclusive_ ranges,請查看我的編輯歷史記錄。 :) – sarnold 2011-04-07 08:56:49

+0

這是否公平,建議正則表達式將允許「Max_value:1776」通過177部分落入範圍?當然,這主要是讓人覺得混亂。 – 2011-04-08 05:58:04

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 
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