grep中的grep数字范围

时间:2017-07-31 14:25:47

标签: shell grep numbers

我怎样才能看到有数字的字符串是否在数字范围内?

我试过了:

v1=110
v2=220
echo "app_name_117.sh" | grep -iEo "*.*.($v1|$v2).sh"

范围可以介于0到999之间。 到目前为止没有运气。

2 个答案:

答案 0 :(得分:2)

最好使用awk代替grep来比较数值范围:

echo "app_name_117.sh" | awk -F '[._]+' '$(NF-1) >= 116 && $(NF-1) <= 118' && $NF=="sh"

-F '[._]+'将一个或多个下划线或点字符设置为输入字段分隔符。我们在$NF中获得了扩展名或最后一个字段。之前的数字可在(NF-1)th字段中找到。

答案 1 :(得分:0)

正则表达式应该更复杂:http://regular-expressions.info/numericranges.html

这可以帮助您生成一个:http://gamon.webfactional.com/regexnumericrangegenerator

您也可以使用awk:

$ echo "app_name_117.sh" | awk -F "[_.]" '{if ($3>=117 && $3<=120) print $0}'

Awk还支持在命令行中使用-v开关添加变量:

$ echo "app_name_117.sh" | awk -F "[_.]" -v v1=110 -v v2=120 '{if ($3>=v1 && $3<=v2) print $0}'
app_name_117.sh

$ echo "app_name_07.sh" | awk -F "[_.]" -v v1=110 -v v2=120 '{if ($3>=v1 && $3<=v2) print $0}'
# no output