我有一个GC内容的文件,如Total time for which application threads were stopped: 0.0017830 seconds, Stopping threads took: 0.0002897 seconds
和更多类似的行。出于疑难解答的目的,我需要提取stopped:
超过1.x
秒
我曾尝试使用grep 'stopped[: 1-9]*'
,但我对正则表达式的使用并不多。请你帮助我好吗。
谢谢。
答案 0 :(得分:3)
简单地排除时间较短的那些会不会更容易?
grep 'stopped: ' | grep -v 'stopped: 0'
答案 1 :(得分:2)
试
DECLARE @folder_path NVARCHAR(255) = '$(ProgramW6432)' + '\my_path\'
SET @sql = 'BULK INSERT dbo.mytable
FROM ''' + @folder_path + 'foo.dat'''
EXEC sys.sp_executesql @stmt = @sql
也可以捕获10.
或者,更好地分解公共元素并允许更多的数字而不是2。
grep -E 'stopped: ([1-9]\.|[0-9]{2}\.)' file
答案 2 :(得分:1)
我建议使用egrep
来完成这项工作,为您提供更多正则表达式选项。
以下是可能适合您的用例的正则表达式的起点:
egrep "stopped: [0-9]+" data.txt
这将返回其中包含stopped:
后跟至少一个数字的任何行。
答案 3 :(得分:1)
您可以使用FPAT
变量
awk -v FPAT="stopped: *[0-9.]+" '{val=$1; sub(/.*: */, "", val)} val > 1' file
使用FPAT
我们仅将stopped: *[0-9.]+
正则表达式作为字段进行匹配。这给了我们stopped: 1.1017830
$1
之类的内容。使用sub
函数,我们会移除:
之前的所有内容并跟随空格,从而只留下变量1.1017830
中的数字val
。
最后val > 1
将打印此数字val
大于1
的行。
答案 4 :(得分:0)
grep -E 'Stopping.*[1-9][0-9]*\.[0-9]+' file
[1-9][0-9]*\.[0-9]+
是为了确保“超过1.x秒”