Wie kann ich mit grep eine bestimmte Variable aus der Ausgabe eines Befehls ausdrucken?

Wie kann ich mit grep eine bestimmte Variable aus der Ausgabe eines Befehls ausdrucken?

Datei 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)

Wie kann ich mit PHP-Code Ausgaben erfassen 62.89mm/sund ausdrucken?62.89grep

Ich verwende diesen Code, aber er druckt die ganze Zeile, z. B.: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 ;
?>

Fragen-Update:Wie kann ich 11:00:41 aus den obigen Daten kopieren, die mit „Gesamtzeit (ohne Beschleunigung)“ verknüpft sind: Ich habe versucht, den in der Antwort vorgeschlagenen Befehl zu verwenden, erhalte aber hier eine Antwort . 11:00:41 (39640.65sec)Wie kann ich das vermeiden?(39640.65sec)$ grep -Po '(?<=Overall Time \(w/o Acceleration\): ).*' testjar.txt

Antwort1

Verwenden Sie eine positive Lookbehind-Assertion mit GNU grep:

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

Antwort2

Verwenden Sie sedzum Auslesen 62.89mm/sder Beispieldaten, indem Sie den Zeilenanfang abgleichen und löschen:

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

So entfernen Sie auch die mm/sEinheiten am Ende (dadurch werden alle Nicht-Ziffern am Ende entfernt):

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

Zur Update-Frage:

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

Dadurch wird die Zeitzeichenfolge aus der Zeile extrahiert, die Overall Timein Ihren Daten mit beginnt.

verwandte Informationen