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バイトでエンコードされたUnicodeシンボル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]//'

関連情報