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]//',第一行 ie1 仍保留在那里。既然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 开头字节顺序标记。它是unicode符号U+FEFF,在UTF-8中编码为三个字节。357 273 277当您以 8 为基数打印这三个字节时,它们会显示出来。

对于sed命令来说,行开头的那些字节意味着1实际上不是该行的第一个字符。许多其他工具也会以同样的方式处理它。

您需要在进行其他处理之前删除 BOM,才能获得有用的结果。例如,您可以启动sed脚本来s/^\xef\xbb\xbf//删除 BOM。你的完整命令将变成

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

相关内容