我有一个打印请求时间的日志文件,例如
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)(.*$)
答案 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)