grep を使用してコマンドの出力から特定の変数を印刷するにはどうすればよいですか?

grep を使用してコマンドの出力から特定の変数を印刷するにはどうすればよいですか?

test.txt ファイル:

Ext Temperatur:  210.0°
Avg.Speed(All):    62.89mm/s
Avg.Speed(Print):  49.99mm/s
Avg.Speed(Travel): 199.84mm/s
Overall Time (w/o Acceleration): 11:00:41 (39640.65sec)

PHP コードを使用して と を出力として取得および印刷するには62.89mm/sどう62.89すればよいですか?grep

私はこのコードを使用していますが、行全体が印刷されます。例:Avg.Speed(All): 62.89mm/s

<?php
$gcode_new = "grep -P 'Avg.Speed(All):' test.txt";

include('Net/SSH2.php');

$ssh = new Net_SSH2('XXX.61.XXX.227');
if (!$ssh->login('root', 'PASS')) {
    exit('Login Failed');
}
$target = $ssh->exec($gcode_new);

echo $target ;
?>

質問の更新:「全体時間(加速なし)」に関連付けられている上記のデータから 11:00:41 をコピーするにはどうすればよいですか。回答で提案されているコマンドを使用しようとしましたが、11:00:41 (39640.65sec)ここで受け取った場合、どのように回避できますか(39640.65sec)$ grep -Po '(?<=Overall Time \(w/o Acceleration\): ).*' testjar.txt

答え1

GNU grep で肯定的な後読みアサーションを使用します。

$ grep -Po '(?<=Avg.Speed\(All\):    ).*' test.txt
62.89mm/s
$ grep -Po '(?<=Avg.Speed\(All\):    )[0-9\.]+' test.txt
62.89

答え2

行の先頭を一致させて削除することで、サンプル データからsed取得するために使用します。62.89mm/s

sed -n 's/^Avg\.Speed(All):[[:blank:]]*//p' test.txt

末尾の単位も削除するには、次mm/sのようにします (これにより、末尾の数字以外の文字が削除されます)。

sed -n '/^Avg\.Speed(All):[[:blank:]]*/{s///;s/[^[:digit:]]*$//p;}' test.txt

更新に関する質問:

sed -n 's/^Overall Time.*\(..:..:..\).*/\1/p' file

Overall Timeこれにより、データ内ので始まる行から時間文字列が抽出されます。

関連情報