파일에서 숫자를 읽는 방법(마법)은 무엇입니까?

파일에서 숫자를 읽는 방법(마법)은 무엇입니까?

"파일 드로잉"을 사용하여 그림의 형식을 지정하고 싶습니다.

파일은 다음과 같이 시작됩니다.

CAD
A1 
mm

(A1 다음은 공백)

또는:

CAD
A00
m 

("m" 뒤에는 공백으로 두세요)

나는 파일 마술과 같은 것을 시도했습니다.

0      string  CAD\n     CAD-Drawing
>&0    regex   ^A[0-9]+  Format=[%s]
>>&0   search  \n
>>>&0  regex   ^[a-z]+   Units=[%s]

하지만 행운은 없습니다! 이 문제를 해결할 방법이 있나요? 공백이 없는 것이 좋습니다.

이는 다음뿐만 아니라 다음을 의미합니다.

0     string  CAD\n  CAD-Drawing
>&0   string  x      Format=[%s]
>>&0  string  x      Units=[%s]

결과는...format=[A1]...또는...unit=[m]입니다.

답변1

의 정규식은 man magic그다지 자세하지 않습니다. 그런데 이것 좀 봐훌륭한 답변저자: JigglyNaga.

먼저 매직 파일의 정규식에서 몇 문자를 이스케이프해야 합니다. ^공백 +이 그 예입니다. 설명하는 파일에 대해 매직 파일이 작동하도록 만드는 두 가지 방법은 다음과 같습니다.

0      string  CAD\n       CAD-Drawing
>&0    regex   \^A[0-9]\+  Format=[%s]
>>&0   search  \n
>>>&0  regex   \^[a-z]\+   Units=[%s]

공백을 무시하므로 다음이 인쇄됩니다.

$ file -m mmm file[12].cad 
file1.cad: CAD-Drawing Format=[A1] Units=[mm]
file2.cad: CAD-Drawing Format=[A00] Units=[m]

(내 겸손한 의견으로는) 더 나은 접근 방식은 다음과 같습니다.버전그리고단위끈:

0      string  CAD\n         CAD-Drawing
>&0    regex   \^A[0-9\ ]\+  Format=[%s]
>>&0   search  \n
>>>&0  regex   \^[a-z\ ]\+   Units=[%s]

(문자 그룹 내에 있더라도 공백을 이스케이프 처리해야 합니다.)

그러면 다음이 인쇄됩니다:

$ file -m mmm file[12].cad 
file1.cad: CAD-Drawing Format=[A1 ] Units=[mm]
file2.cad: CAD-Drawing Format=[A00] Units=[m ]

인용하다:

관련 정보