我只想获取等号和eV之间的数字
Final energy = -2959.123199674 eV
我不能只是grep等号,因为此文件中有太多符号。我想grep“最终能量=”,并获取-2959.123199674。
我尝试过:
awk '{for(i=1;i<=NF;i++)if($i=="Final Energy =")print $(i+1)}' filename
但这不起作用
如何包含这些空格?
答案 0 :(得分:1)
您可以像
一样使用sed
sed -n 's/.*Final [Ee]nergy *= *\([0-9.-]*\).*/\1/p' filename
请参见online sed
demo:
s="Final energy = -2959.123199674 eV"
sed -n 's/.*Final [Ee]nergy *= *\([0-9.-]*\).*/\1/p' <<< "$s"
# => -2959.123199674
.*Final [Ee]nergy *= *\([0-9.-]*\).*
POSIX BRE模式将匹配具有Final energy
(我使用方括号表达式匹配e
或E
),零个或多个空格的整行, =
,再输入零个或多个空格,然后将任何0个或多个数字,点或连字符捕获到组1(\1
)中。 -n
和p
选项将使sed
仅打印替换结果。
如果您希望将除空格以外的任何字符捕获到组1中,请将[0-9.-]*
替换为[^[:space:]]*
。甚至是[^ ]*
。
答案 1 :(得分:0)
请您尝试一次。
awk '{sub(/.*=/,"");sub(/eV.*/,"");gsub(/^ +| +$/,"")} 1' Input_file
答案 2 :(得分:0)
首先使用Final energy
的grep,然后使用grep -o
提取数字:
grep 'Final energy =' | grep -o '[-[:digit:].]*'