sed -e 's / ^ [0-9] //' não funciona para a primeira linha

3

O seguinte é o texto que eu quero analisar com sed (Mac OS X 10.11.1 bash)

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

Eu posso excluir a primeira linha com sed -e 's/[0-9]//' .

Mas com sed -e 's/^[0-9]//' , a primeira linha, ou seja, 1 permanece lá. Como 1 está no início da primeira linha, não deveria ser excluído?

head -n1 2001.srt | od -c

0000000  357 273 277   1  \n
0000005

Acabou de criar um novo arquivo de texto começando com "1". cabeça -n1 2002.srt | od -c

0000000    1  \n
0000002

sed -e 's / ^ [0-9] //' funciona para este arquivo recém-criado.

Sim, há algo antes de "1".

    
por Brady Lee 21.11.2015 / 13:06

1 resposta

4

Seu arquivo começa com uma marca de pedido de byte UTF-8 . É o símbolo unicode U + FEFF que é codificado como três bytes em UTF-8. Esses três bytes aparecem como 357 273 277 quando você os imprime na base 8.

Para o comando sed , esses bytes no início da linha significa que 1 não é, na verdade, o primeiro caractere nessa linha. Muitas outras ferramentas irão tratá-lo da mesma maneira.

Você precisa remover a lista de materiais antes de fazer outro processamento para obter um resultado útil. Por exemplo, você pode iniciar seu script sed com s/^\xef\xbb\xbf// para remover a lista de materiais. Seu comando completo então se tornaria

sed -e 's/^\xef\xbb\xbf//;s/^[0-9]//'
    
por 21.11.2015 / 15:43