Вы можете использовать sed
как
sed -n 's/.*Final [Ee]nergy *= *\([0-9.-]*\).*/\1/p' filename
См. онлайн sed
демо :
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
), ноль или более пробелов, =
, снова ноль или более пробелы, а затем будет записывать в группу 1 (\1
) любые 0 или более цифр, точек или дефисов. Опции -n
и p
заставят sed
печатать только результат замещения.
Если вы предпочитаете вводить в группу 1 любые символы, кроме пробелов, замените [0-9.-]*
на [^[:space:]]*
. Или даже [^ ]*
.