Regex 对于多个文件中的每一行,提取包含;XXXX ms";其中XXXX是一个数字>;到给定值

Regex 对于多个文件中的每一行,提取包含;XXXX ms";其中XXXX是一个数字>;到给定值,regex,linux,string,console,grep,Regex,Linux,String,Console,Grep,我有大量的日志文件,我想找到所有这些日志文件中的每一行,其中有以下内容:“XXXX ms”,其中XXXX表示一个大于我选择的值的整数 如何使用grep(或任何其他命令)来执行此操作 我正在Windows上使用Cygwin(linux控制台模拟器) 例如: 2013-09-03 11:33:17 11278 ms ProcessMsgDisconnectV2_01 - Disconnection request received from MU. 试试这句话: awk '$4=="ms"&

我有大量的日志文件,我想找到所有这些日志文件中的每一行,其中有以下内容:“XXXX ms”,其中XXXX表示一个大于我选择的值的整数

如何使用grep(或任何其他命令)来执行此操作

我正在Windows上使用Cygwin(linux控制台模拟器)

例如:

2013-09-03 11:33:17    11278 ms ProcessMsgDisconnectV2_01 - Disconnection request received from MU.
试试这句话:

awk '$4=="ms"&&$3>100' file
这里的
100
是您的值,您可以通过以下方式改进它,例如从shell变量获取参数:

awk -v va="$value" '$4=="ms"&&$3>va' file

使用一个带有两个参数的
perl
一行程序,第一个参数是要比较的值,第二个参数是要搜索的文件

perl -ne '
    BEGIN { $value = shift } 
    print if m/\b(\d+)\s+ms\b/ && $1 > $value
' 6578 infile

您可以使用一个小的PHP脚本来实现这一点: 设置最小值:

$minValue = 500;
现在在所有线路上循环。在循环内部:

$line = "test 1456ms"; // your line, here just example
    if (preg_match('/(\d{4})ms/m', $line, $matches)) {
        if ($matches[1][0] > $minValue) echo $line;
    }
}
这将只检查xxms的第一次出现。
如果要检查其他匹配项,请改用
preg\u match\u all

其中XXXX表示大于我选择的值的整数。
能否显示一些输入示例?通常这种工作不适用于正则表达式(grep)。添加了一个示例!如果我选择10000,这一行必须被选中,如果我选择20000,这一行不能被选中。使用awk回答的相关问题:谢谢你的回答。只需抛出稍微不同的方法:
perl-lane'BEGIN{$value=shift}print If$F[3]eq'ms'&&$F[2]>$value'6578 infle
@JoshG79:是的。而且可能更容易适应日志文件布局的更改。谢谢,我会同意的。