Grep是Linux中的一个字符串
我有一个记录如下字符串的日志文件:(1512424528.554:0:1880:1880)。我只需要grep出最后一个值超过1000的行并打印它们。思考?Grep不是这项任务最实用的工具。正如@williampersell所建议的,使用awk或其他工具解决此问题 解决方案: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
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”您的_文件即可