sed -e 's/^[0-9]//'는 첫 번째 줄에서 작동하지 않습니다

sed -e 's/^[0-9]//'는 첫 번째 줄에서 작동하지 않습니다

다음은 sed(Mac OS X 10.11.1 bash)를 사용하여 구문 분석하려는 텍스트입니다.

1
00:25:43,959 --> 00:25:46,502
Here you are, sir.
Main level, please.

을 사용하여 첫 번째 행을 삭제할 수 있습니다 sed -e 's/[0-9]//'.

그러나 의 경우 sed -e 's/^[0-9]//'첫 번째 줄, 즉 1 여전히 거기에 남아 있습니다. 1첫 번째 줄의 시작 부분이므로 삭제해야 할까요 ?

헤더-n1 2001.srt OD-C |

0000000  357 273 277   1  \n
0000005

"1"로 시작하는 새 텍스트 파일을 만들었습니다. 헤더-n1 2002.srt OD-C |

0000000    1  \n
0000002

sed -e 's/^[0-9]//' 새로 생성된 파일에 적용됩니다.

네, "1" 앞에 뭔가가 있습니다.

답변1

파일이 UTF-8로 시작됩니다.바이트 순서 표시. 이는 UTF-8의 3바이트로 인코딩된 유니코드 기호 U+FEFF입니다. 357 273 277이 3바이트를 기본 8로 인쇄하면 나타납니다.

명령 의 경우 sed줄 시작 부분에 있는 바이트는 1실제로 줄의 첫 번째 문자가 아니라는 의미입니다. 다른 많은 도구도 동일한 방식으로 처리합니다.

유용한 결과를 얻으려면 다른 처리를 수행하기 전에 BOM을 제거해야 합니다. 예를 들어 sed스크립트를 실행하여 s/^\xef\xbb\xbf//BOM을 삭제할 수 있습니다 . 귀하의 완전한 명령은

sed -e 's/^\xef\xbb\xbf//;s/^[0-9]//'

관련 정보