Mostra o caractere na posição em um arquivo

7

Eu gostaria de imprimir o caractere em uma determinada posição usando apenas a linha de comando. Por exemplo:

<command> 5

A saída seria a se o quinto caractere desse arquivo fosse a .

Como estou lidando com arquivos grandes, idealmente, isso seria capaz de lidar com arquivos grandes.

    
por testTester 16.04.2016 / 09:32

3 respostas

4

com sed :

$ echo 12345 | sed 's/.\{4\}\(.\).*//;q'
5
$ echo 1234ắ | sed 's/.\{4\}\(.\).*//;q'
ắ

Observe que sed não produzirá saída se a entrada contiver caracteres de vários bytes inválidos na localidade atual. Você pode usar LC_ALL=C se trabalhar apenas com caracteres de byte único.

Com o arquivo ASCII, você também pode usar dd :

$ echo 12345 | dd bs=1 skip=4 count=1 2>/dev/null
5
    
por 16.04.2016 / 09:54
7

Se você quiser o quinto byte, contando a partir de 1:

dd ibs=1 skip=4 count=1

ou

tail -c +5 | head -c 1

Observe que tail conta a partir de 1, então, dado um arquivo contendo abcdefg , isso imprime e .

dd e tail -c estão no POSIX. head -c é comum, mas não está no POSIX; está no GNU coreutils, BusyBox, FreeBSD e NetBSd e não no OpenBSD ou no Solaris.

    
por 16.04.2016 / 23:59
2

Ou usando (gnu) grep:

grep -zoP '.{4}\K.'   file

( -z foi usado para lidar com \n antes do quinto caractere)

    
por 16.04.2016 / 12:34