在字符串中查找小数,剩下的就是

时间:2018-02-14 15:23:13

标签: regex

我有一个打印请求时间的日志文件,例如

  

2018-02-14 14:11:27,596 INFO HELLO WORLD:224.1 ms

     

2018-02-14 14:11:27,596 INFO HELLO WORLD:224.2 ms

     

2018-02-14 14:11:27,596 INFO GOOD BYE WORLD:224.3 ms

     

2018-02-14 14:11:27,596 INFO HELLO WORLD:224.4 ms

我想用HELLO WORlD删除行,但只打印ms时序。然后我会将结果粘贴到excel中,得到总数/平均值等等。

grep'HELLO WORlD'myFile.txt会给我:

  

2018-02-14 14:11:27,596 INFO HELLO WORLD:224.1 ms

     

2018-02-14 14:11:27,596 INFO HELLO WORLD:224.2 ms

     

2018-02-14 14:11:27,596 INFO HELLO WORLD:224.4 ms

但我想:

  

224.1 ms

     

224.2 ms

     

224.4 ms

或者

  

224.1

     

224.2

     

224.4

(?< = HELLO WORlD :)(?s)(。* $)但它在匹配的行上加上“HELLO WORLD:”之后的所有内容以及整个文档的其余部分。另外我无法使用它:

grep 'HELLO WORlD' myFile.txt | grep (?<=HELLO WORlD: )(?s)(.*$)

4 个答案:

答案 0 :(得分:1)

假设您使用awk搜索日志文件,grep可用。

使用awk

非常简单
awk '/HELLO WORlD/{print $(NF-1)}' file.log

224.1
224.2
224.4

或者使用grep -oP

grep -oP 'HELLO WORlD:\h+\K[\d.]+' file.log

224.1
224.2
224.4

答案 1 :(得分:1)

如果您希望保持非常简单且坚持使用grep,则可以使用-o--only-matching)选项。

例如,grep -o '...$将输出最后三个字符。在您的情况下,这将为您提供所需的结果。

grep 'HELLO WORlD' myFile.txt | grep -o '........$'

224.1 ms
224.2 ms
224.4 ms

答案 2 :(得分:0)

使用 剪切 + grep 解决方案:

grep "HELLO WORlD"  Input_file | cut -d" " -f6

输出如下:

224.1
224.2
224.4

答案 3 :(得分:0)

使用-o选项;仅获取字符ms

后面的数字

你可以尝试

grep 'HELLO WORlD' myFile.txt | grep -o '[0-9]*.[0-9]* ms$'

尝试各种输入

enter image description here