我有一个像下面这样的输入。
Curveplot
Time
Maxima of Curve
Part no.
13 #pts=2
* Minval= 0.000000e+000 at time= 0.000000
* Maxval= 2.237295e+000 at time= 0.001000
0.000000e+000 0.000000e+000
9.999999e-004 2.237295e+000
endcurve
我想从这个文件中获取最大值,这是Maxval
之后的值* Maxval= 2.237295e+000
有人可以建议如何使用linux sed吗? 我的输出只有2.237295e + 000。
答案 0 :(得分:5)
使用以下单行仅显示2.237295e+000
sed -nr 's/.*Maxval= *([^ ]*).*/\1/p'
正则表达式:
Match:
.* # match any characters
Maxval= # upto 'Maxval='
* # match multiple spaces (that is a space followed by *)
([^ ]) # match anything not a space, use brackets to capture (save this)
.* # match the rest of line
Replace with:
\1 # the value that a was captured in the first set of brackets.
因此,我们有效地将包含单词Maxval=
的整行替换为Maxval
的值。
注意:根据sed
的平台和/或实施情况,您可能需要使用-E
代替-r
。
答案 1 :(得分:2)
一种方式:
sed -n 's/.*Maxval=\s*\([^ ]*\).*/\1/p' file.txt
结果:
2.237295e+000
答案 2 :(得分:0)
提案:
cat test.txt | grep Maxval | sed -e 's/^.*Maxval= *//' -e 's/ at.*$//'
2.237295e+000
答案 3 :(得分:0)
awk '/Maxval=/{print $3}' your_file
测试如下:
> cat temp
Curveplot
Time
Maxima of Curve
Part no.
13 #pts=2
* Minval= 0.000000e+000 at time= 0.000000
* Maxval= 2.237295e+000 at time= 0.001000
0.000000e+000 0.000000e+000
9.999999e-004 2.237295e+000
endcurve
> awk '/Maxval=/{print $3}' temp
2.237295e+000
答案 4 :(得分:0)
你也可以用grep:
来做<infile grep -o 'Maxval= *[^ ]\+' | grep -o '[^ ]\+$'
输出:
2.237295e+000