sed 명령을 사용하여 불필요한 공백, 문자 및 소수점을 다듬습니다.

sed 명령을 사용하여 불필요한 공백, 문자 및 소수점을 다듬습니다.

현재 AppleScript의 명령을 사용하여 체중계에서 수신하는 체중 데이터를 자릅니다. 우리는 다음 형식으로 숫자를 나타내는 가중치를 받습니다 X.XXX. lb. . X숫자 앞의 공백 6개, 공백 3개, lb나머지 공백 5개를 제거하겠습니다.

다음 명령을 사용하여 문자를 성공적으로 자르고 X.XXX..파일 메타데이터에서 읽은 가중치를 얻었습니다.

 | sed 's/[.^0-9]//g'

또한 체중 데이터에서 천 번째 문자 뒤의 소수점 두 자리를 제거하려고 합니다. 어디로 가야할지 잘 모르겠습니다.

편집하다:

정확히 무슨 일이 일어나고 있는지 더 명확하게 하기 위해 우리는 MacOS에서 이미지 파일을 작성하는 프로그램을 사용하고 있습니다. 제가 작업 중인 스크립트 부분은 exiftool메타데이터를 이미지 파일에 쓰기 전에 이 가중치 데이터를 다듬는 것입니다. 다양한 텍스트 상태에 대한 내 예에서 X위의 s는 모두 항상 달라질 수 있는 숫자이지만 소수점 이하 수천 자리를 넘지는 않습니다. 따라서 첫 번째 소수점 뒤와 첫 번째 소수점 이전에는 3자리 이상의 숫자를 얻을 수 없습니다. 이 경우 최대 2자리까지 받을 수 XX.XXX있으며 누락된 숫자 없이 추가 문자를 잘라야 합니다. 이것이 문제를 더 잘 이해하는 데 도움이 되기를 바랍니다.

패키지의 무게를 측정하면 저울은 다음과 같이 데이터를 프로그램에 보냅니다.

     1.392.   lbs.    

1.392..파일에 대한 메타데이터를 작성하기 전에 스크립트에서 이 콘텐츠를 다듬도록 했습니다. 소수점 마지막 두 자리도 제거하고 중량 판독값이 두 자리인 경우에도 11.987동일한 트림을 수행할 수 있기를 바랍니다.

저는 이미지 파일을 캡처하고 AppleScript를 사용하여 원시 카메라 파일에서 .jpg를 작성하는 프로그램을 사용하고 있습니다. 이 작업은 프로그램에서 버튼을 클릭할 때 수행됩니다.

체중계로부터 다음 형식의 체중 데이터를 받습니다.

여기에 이미지 설명을 입력하세요.

스크립트의 다음 부분은 이를 정리합니다.

set thePath to "Macintosh HD:Users:Shared:CS:"
        if thePath is equal to thePath then
            -- Format the weight value to remove extra spaces and decimals
            set cleanWeightValue to do shell script "echo " & weightValue & " | sed 's/[^0-9.]//g'"
            
            -- Update Exif metadata with cleanWeightValue
            do shell script "/usr/local/bin/exiftool '-Description=je " & cleanWeightValue & " lbs' " & quoted form of POSIX path of thePath & "front.JPG"
            do shell script "/usr/local/bin/exiftool '-Caption-Abstract=je " & cleanWeightValue & " lbs' " & quoted form of POSIX path of thePath & "front.JPG"
            do shell script "/usr/local/bin/exiftool '-ImageDescription=je " & cleanWeightValue & " lbs' " & quoted form of POSIX path of thePath & "front.JPG"
        end if

다음으로, 각 이미지의 메타데이터에서 가중치를 다음 형식으로 읽습니다.

여기에 이미지 설명을 입력하세요.

우리의 목표는 소수점 마지막 두 자리를 제거하는 것입니다. 이것이 기존 sed 명령을 기반으로 구축될 수 있는지 궁금합니다.

답변1

전체 입력 사항에 대한 논의를 무시합니다. sed 's/[^0-9.]//g'후행 점만 효과가 있다면 간단히 후행 점을 제거하는 것이 좋습니다.

sed 's/[^0-9.]//g;s/\.*$//'

관련 정보