我编写了一个 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