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)

62.89mm/s합계를 출력 으로 얻고 PHP 코드를 사용하여 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그러면 다음으로 시작하는 데이터의 행에서 시간 문자열이 추출됩니다.

관련 정보