以下是我想用 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]//'