Regex 对于多个文件中的每一行,提取包含;XXXX ms";其中XXXX是一个数字>;到给定值
我有大量的日志文件,我想找到所有这些日志文件中的每一行,其中有以下内容:“XXXX ms”,其中XXXX表示一个大于我选择的值的整数 如何使用grep(或任何其他命令)来执行此操作 我正在Windows上使用Cygwin(linux控制台模拟器) 例如: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"&
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:是的。而且可能更容易适应日志文件布局的更改。谢谢,我会同意的。