bash与正则表达式

时间:2016-04-18 19:39:14

标签: regex bash grep

我有一个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]*',但我对正则表达式的使用并不多。请你帮助我好吗。

谢谢。

5 个答案:

答案 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变量

来使用gnu-awk
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秒”