I0709 13:45:33.848619 3415 upgrade_proto.cpp:1044] Attempting to upgrade input file specified using deprecated 'solver_type' field (enum)': models/model
I0709 20:02:09.081399 3415 solver.cpp:228] Iteration 101, loss = 2.25779
I0709 20:02:09.081477 3415 solver.cpp:244] Train net output #0: loss = 2.25779 (* 1 = 2.25779 loss)
I0709 20:02:09.081495 3415 sgd_solver.cpp:106] Iteration 101, lr = 0.01
I0709 20:02:20.067615 3415 solver.cpp:228] Iteration 102, loss = 2.22583
I0709 20:02:20.067740 3415 solver.cpp:244] Train net output #0: loss = 2.22583 (* 1 = 2.22583 loss)
从上面这样的文件中,我需要在这种情况下使用数字2.25779和2.22583,并将每个数据转储到新文件的一行上。
我尝试过类似的事情:
cat file.txt | grep -P 'loss = .*[0-9]\n' > res.csv
这与任何事都不匹配,我不知道如何更具体(只有数字而不是损失=)。
所以a:
cat res.csv
应显示输出:
2.25779
2.22583
答案 0 :(得分:0)
看起来这会对你有所帮助:
(?<!:)[0-9]+(\.[0-9]+)
它会匹配花车,但不会与微秒相匹配,就像那样:
20:02:09.081477
答案 1 :(得分:0)
答案 2 :(得分:0)
这适用于任何操作系统上的任何sed:
$ sed -n 's/.*loss = \([0-9.]*\)$/\1/p' file
2.25779
2.22583
只有GNU grep会支持您尝试使用的选项/语法,并且没有grep支持您实现仅输出部分匹配文本(这将需要grep没有的捕获组)的目标所需的内容。