以下命令按預期工作。在grep中使用範圍
grep -B3 'Max_value: 127' proc_*.*
但我需要比較最大價值的數量,發現如果是-E
使用擴展模式,允許交替不逃避127和200之間
grep -B3 'Max_value: (>127 and <200)' proc_*.*
以下命令按預期工作。在grep中使用範圍
grep -B3 'Max_value: 127' proc_*.*
但我需要比較最大價值的數量,發現如果是-E
使用擴展模式,允許交替不逃避127和200之間
grep -B3 'Max_value: (>127 and <200)' proc_*.*
grep 'Max_value:' proc_*.* | awk ' $2 ~ /[0-9]{3}$/ && $2 > 127 && $2 < 200 '
編輯:將支票(3位數字)$。
非常有趣。 #但我得到的值如1984-10-17和17:46:07#是否可以檢查$ 2值是否爲數字? – shantanuo 2011-04-11 04:08:54
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_*.*
不錯,但需要'(> 127和<200)',而不是'(> = 127和<= 200)' – Johnsyweb 2011-04-07 08:53:50
@Johnsyweb,因爲指定了127作爲一個良好的輸入,首先,@ shantanuo使用_between_是_inclusive_,而不管他的代碼實際上是怎麼說的。 :) 接得好。 @shantanuo,如果你真的想要_inclusive_ ranges,請查看我的編輯歷史記錄。 :) – sarnold 2011-04-07 08:56:49
這是否公平,建議正則表達式將允許「Max_value:1776」通過177部分落入範圍?當然,這主要是讓人覺得混亂。 – 2011-04-08 05:58:04
我敢打賭,你與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
您的任務用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
您使用的是錯誤的工具 – 2011-04-07 08:55:57