gcode 파일이 있는데 Z의 모든 값에서 101.54를 빼야 합니다. 형식은[Z]:[0-9]*.[0-9]*
sed
이 작업을 수행하려면 다른 Linux 도구를 어떻게 사용합니까 ?
좋아요: Z:101.6
결국 로 변경됩니다 Z:0.06
.
미리 감사드립니다
답변1
$ echo "Z:101.6" | perl -p -e 's/Z:(\d+(?:\.\d+)?)/sprintf("Z:%.2f",$1-101.54)/eg'
Z:0.06
이는 Perl의 /e
정규식 수정자를 사용하여 연산자 오른쪽의 표현식을 평가합니다 s///
. 나중에 정수와 부동 소수점을 처리 Z:
하고 대체합니다.모두입력 줄의 어느 곳에서나 찾은 패턴과 일치합니다.
답변2
이것은 작업입니다 awk
.
awk 'BEGIN{FS=OFS=":"}{$2-=101.54;print}'
BEGIN{FS=OFS=":"}
입력 및 출력 필드 구분 기호를 콜론으로 설정합니다.{$2-=101.54;print}
각 행에 대해 두 번째 필드에서 101.54를 빼고 인쇄합니다.- 필요한 경우 또는 를 사용하여 줄을 제한할 수 있지만 명령을 전역으로
$1=="Z"{...}
만들어야 합니다 (그렇지 않으면 모든 줄을 생략하게 됩니다).print
아니요참조Z
), 예를 들어
또는$1=="Z"{$2-=101.54} 1
$1=="Z"{$2-=101.54} {print}
예:
$ echo 'Z:101.6' | awk 'BEGIN{FS=OFS=":"}{$2-=101.54;print}'
Z:0.06