如果grep值大于1000那么

时间:2014-08-23 17:37:01

标签: bash shell

我想在“priority =”的值大于1000的文件中grep“priority =”。

我试过这样的事情:

if grep -q "priority=[ >1000 ]" file; then
    echo "[!] Unnatural priority"
fi

e.g。 <intent-filter android:priority="2147483647">

5 个答案:

答案 0 :(得分:4)

尝试:

(( $(grep -oP 'priority\s*=\s*"\s*\K(\d+)' file) > 1000 )) && echo "warning"

需要一个具有-P perl正则表达式支持的相对较新的grep。的:

  • \K(后面的变量看似)匹配,但从结果中杀死它之前的所有内容,因此它只打印捕获组(\d+)

当然,你也可以使用perl,

perl -nlE 'say $1 if /priority="\K(\d+)/' <<< '<intent-filter android:priority="2147483647">'

打印

2147483647

或sed

sed 's/.*priority="\([0-9][0-9]*\).*/\1/' <<< '<intent-filter android:priority="2147483647">'

答案 1 :(得分:4)

你可以使用这个Perl单行:

perl -lne 'print "[!] Unnatural priority" if /priority="(\d+)"/ && $1 > 1000'

捕获priority =“X”中的数字,如果值大于1000,则打印警告。

如果您愿意,也可以在原生bash中执行此操作:

while read -r line; do 
    if [[ $line =~ priority=\"([[:digit:]]+)\" ]] && (( BASH_REMATCH[1] > 1000 )); then
        echo "[!] Unnatural priority"
    fi
done < file

答案 2 :(得分:3)

您可以尝试使用正则表达式来要求类似于大于一千的数字的模式:

grep -q --regexp="priority=\"[1-9][0-9]\{3,\}\"" file

这应该与priority=后跟至少四位且第一位数字非零的情况相匹配。

答案 3 :(得分:1)

Label1.BackColor = sheets("sheet1").cells(2,2).DisplayFormat.Interior.Color 会让这一切变得简单:

awk

假设当然每行只有一个$ cat file | awk -F '=' '$2 > 1000 {print $0}'

答案 4 :(得分:0)

我遇到了类似的问题 - 检查需要为“2.32 版”或更高版本的版本字符串。我的 grep(嵌入式 BusyBox)不支持 -P 选项或 {n},所以使用基本的 grep:

grep "Version 2\.3[2-9]\|2\.[4-9][0-9]\|[3-9]\.[0-9][0-9]"