使用 grep 和 sed 选择

使用 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"

你有什么建议?

答案1

您只需一行即可完成此操作:

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

解释:

  • -P使用 Perl 兼容正则表达式 (PCRE),它支持更高级的模式匹配
  • -o仅打印行的匹配部分(在本例中,仅打印数字)
  • \K不要将前面的内容视为匹配的一部分(这是 PCRE 的功能。)
  • .*匹配零个或多个任意字符(换行符除外)

要将 grep 输出打印$i到文件中的同一行,请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

相关内容