bash,在两个模式之间提取字符串

时间:2013-06-01 16:49:00

标签: string bash sed grep

我有一个包含这样一个代码段的文本文件:

[#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命令行执行此操作?

编辑:数字可以在不同文件之间更改,但该行的其余部分保持不变。

6 个答案:

答案 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)

GNU sed

sed '/CLs\s/!d;s/.*=\s\([.0-9]\+\).*/\1/' file