sed -e 's / ^ //' ne fonctionne pas pour la première ligne

Voici le text que je veux parsingr avec sed (Mac OS X 10.11.1 bash)

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

Je peux supprimer la première ligne avec sed -e 's/[0-9]//' .

Mais avec sed -e 's/^[0-9]//' , la première ligne, c'est-à-dire 1 rest là. Puisque 1 est au début de la première ligne, ne devrait-il pas être supprimé?

tête -n1 2001.srt | od -c

 0000000 357 273 277 1 \n 0000005 

Juste créé un nouveau file text commençant par "1". head -n1 2002.srt | od -c

 0000000 1 \n 0000002 

sed -e 's / ^ [0-9] //' fonctionne pour ce nouveau file.

Oui, il y a quelque chose avant "1".

Votre file commence par une marque de command UTF-8 byte . C'est un symbole unicode U + FEFF qui est codé en tant que trois octets en UTF-8. Ces trois octets apparaissent comme 357 273 277 lorsque vous les imprimez en base 8.

Pour la command sed ces octets au début de la ligne signifient que 1 n'est en fait pas le premier caractère de cette ligne. De nombreux autres outils le traiteront de la même façon.

Vous devez retirer la nomenclature avant d'effectuer d'autres traitements afin d'get un résultat utile. Par exemple, vous pouvez démarrer votre script sed avec s/^\xef\xbb\xbf// pour supprimer la nomenclature. Votre command complète deviendrait alors

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