Grep是Linux中的一个字符串

Grep是Linux中的一个字符串,linux,bash,grep,Linux,Bash,Grep,我有一个记录如下字符串的日志文件:(1512424528.554:0:1880:1880)。我只需要grep出最后一个值超过1000的行并打印它们。思考?Grep不是这项任务最实用的工具。正如@williampersell所建议的,使用awk或其他工具解决此问题 解决方案: grep -P '.*:[1-9][0-9]{3,}\)$' your_file awk -F':' 'substr($NF, 0, length($NF)-1)*1 > 1000' your_file perl

我有一个记录如下字符串的日志文件:(1512424528.554:0:1880:1880)。我只需要grep出最后一个值超过1000的行并打印它们。思考?

Grep不是这项任务最实用的工具。正如@williampersell所建议的,使用awk或其他工具解决此问题

解决方案

grep -P '.*:[1-9][0-9]{3,}\)$' your_file 
awk -F':' 'substr($NF, 0, length($NF)-1)*1 > 1000' your_file
perl -ne 'print if (/.*:(\d+)\)$/ and  $1>1000)' your_file
使用grep:您可以通过使用perl regexp(
-p
标志)在最后一个冒号(
*:
匹配所有内容直到最后一个冒号)和行尾(
$
)之间查找至少4个以数字1到9开头的数字(
[1-9][0-9]{3,}
)来解决这个问题,但这并不完美。此解决方案并不完美,因为它给出的结果大于或等于1000

grep -P '.*:[1-9][0-9]{3,}$' your_file
使用awk:在使用
-F
设置字段分隔符后,只需将最后一个字段(
$NF
)与1000进行比较即可

awk -F':' '$NF > 1000 { print $0 }' your_file
使用perl:您可以查找最后一个冒号和行尾之间的最后一个数字,并将这些数字
(\d+
捕获到
$1
中,与1000进行比较

perl -ne 'print if (/.*:(\d+)$/ and  $1>1000)' your_file
更新

基于@vaettchen的注释,我添加了一些解决方案,如果括号是记录字符串的一部分,则将其考虑在内

grep

grep -P '.*:[1-9][0-9]{3,}\)$' your_file 
awk -F':' 'substr($NF, 0, length($NF)-1)*1 > 1000' your_file
perl -ne 'print if (/.*:(\d+)\)$/ and  $1>1000)' your_file
awk

grep -P '.*:[1-9][0-9]{3,}\)$' your_file 
awk -F':' 'substr($NF, 0, length($NF)-1)*1 > 1000' your_file
perl -ne 'print if (/.*:(\d+)\)$/ and  $1>1000)' your_file
perl

grep -P '.*:[1-9][0-9]{3,}\)$' your_file 
awk -F':' 'substr($NF, 0, length($NF)-1)*1 > 1000' your_file
perl -ne 'print if (/.*:(\d+)\)$/ and  $1>1000)' your_file

改用
awk
。OP没有明确说明括号是否是字符串的一部分。如果是,上述解决方案都不起作用。对于
awk
无需声明,只需
awk-F':“$NF>1000”您的_文件即可