我有一个包含这样一个代码段的文本文件:
[#0] PROGRESS:Eval -- P values for mu_sig-130-0 = 1
CLs = 0.0463722 +/- 0
CLb = 0.499991 +/- 0
CLsplusb = 0.0231857 +/- 0
我想找到CLs行,然后打印出数字0.0463722
有没有办法通过bash命令行执行此操作?
编辑:数字可以在不同文件之间更改,但该行的其余部分保持不变。
答案 0 :(得分:2)
使用sed
sed -nr '/\bCLs\b/ {s/.*= ([0-9.]+) .*/\1/p}' inputFile
答案 1 :(得分:1)
您可以使用awk:
awk '/ CLs = 0.0463722 \+\/\- 0/ {print $3}' yourfile
或者,如果您只是寻找包含CLs=
的行(可能),那么将模式概括为:
awk '/ CLs[ ]*=/ {print $3}' yourfile
答案 2 :(得分:1)
awk '$1 == "CLs", $0 = $3'
结果
0.0463722
答案 3 :(得分:0)
awk
可能是要走的路。这是GNU grep
替代方案,启用了PCRE正则表达式
echo ' CLs = 0.0463722 +/- 0' | grep -Po 'CLs\s+=\s+\K\d[.]\d+(?=[^\d])'
0.0463722
答案 4 :(得分:0)
无论其他线条如何,这条grep线都能正常工作。 (你提到那条线是唯一的。)
grep -oP "^\s*CLs\s*=\s*\K[0-9.]*" file
答案 5 :(得分:0)
sed '/CLs\s/!d;s/.*=\s\([.0-9]\+\).*/\1/' file