Выберите использование grep и sed

Я записал сценарий Bash, чтобы выбрать только число в этой фразе (ниже) и скопировать его в файл.

siesta: Total = -29.649928

Вот мое решение (по крайней мере, импровизированное решение):

grep 'Total =' h2.$i.out >> data.dat
sed -i -e "s/"siesta:"/$i/g" "data.dat"
sed -i -e "s/"Total"//g" "data.dat"
sed -i -e "s/"="//g" "data.dat"

У Вас есть какие-либо рекомендации?

-2
задан 15 February 2018 в 00:43

1 ответ

Можно сделать это в одной строке:

grep -Po 'siesta: Total = \K.*' "h2.$i.out" >> data.dat

Объяснение:

  • -P Используйте совместимый с Perl regex (PCRE), который поддерживает намного более усовершенствованное сопоставление с образцом
  • -o Распечатайте только соответствие части строки (в этом случае, просто число)
  • \K Не рассматривайте предыдущее как часть соответствия (Это - функция PCRE.)
  • .* Нуль соответствия или больше любого символа (кроме новой строки)

Распечатать $i в файл в той же строке как вывод grep, выполненный printf '%s' "$i" >> data.dat перед командой grep. Я предполагаю, что Вы выполняете его в цикле, так, чтобы работал бы как это:

for i in ...; do
    printf '%s' "$i" >> data.dat
    grep -Po 'siesta: Total = \K.*' "h2.$i.out" >> data.dat
done
1
ответ дан 31 October 2019 в 01:04

Другие вопросы по тегам:

Похожие вопросы: