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.89grep

이 코드를 사용하고 있지만 전체 줄이 인쇄됩니다. 예: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그러면 데이터에서 시작하는 줄에서 시간 문자열이 추출됩니다 .

관련 정보