Показать символ в позиции в файле

Я хотел бы напечатать символ в заданной позиции, используя только командную строку. Например:

<command> 5 

Выпустил бы, если 5-й символ этого файла был.

Поскольку я имею дело с большими файлами, в идеале это может обрабатывать большие файлы.

  • Как вы извлекаете целое слово, содержащее подстроку?
  • Манипулирование файлами; Вставляйте «;» каждый 12, 44 и 60-й символы в каждую строку текстового файла
  • Как я могу манипулировать содержимым файла, дублируя и меняя некоторые части?
  • Шаблоны значений для сценария bash для файлов apache conf
  • Как написать данные отдельно во многих текстовых файлах, содержащих одни и те же поля?
  • Объединение строк текста с повторным началом
  • Как удалить текст перед разделителем в Linux
  • распечатать, если следующая строка содержит
  • 3 Solutions collect form web for “Показать символ в позиции в файле”

    С sed :

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

    Обратите внимание, что sed не сможет выдавать выходные данные, если вы вводите недопустимые многобайтные символы в текущей локали. Вы можете использовать LC_ALL=C если вы работаете только с одиночными байтовыми символами.

    С файлом ASCII вы также можете использовать dd :

     $ echo 12345 | dd bs=1 skip=4 count=1 2>/dev/null 5 

    Если вы хотите 5-й байт, считая от 1:

     dd ibs=1 skip=4 count=1 

    или

     tail -c +5 | head -c 1 

    Обратите внимание, что tail подсчитывается от 1, поэтому с учетом файла, содержащего abcdefg , это печатает e .

    dd и tail -c находятся в POSIX. head -c является общим, но не находится в POSIX; это в GNU coreutils, BusyBox, FreeBSD и NetBSd, но не в OpenBSD или Solaris.

    Или используя (gnu) grep:

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

    ( -z использовалось для обработки \n до 5-го символа)

    Linux и Unix - лучшая ОС в мире.