파일의 특정 위치에 문자 표시

파일의 특정 위치에 문자 표시

명령줄만 사용하여 특정 위치의 문자를 인쇄하고 싶습니다. 예를 들어:

<command> 5

a파일의 5번째 문자가 출력되면 a.

저는 대용량 파일을 다루고 있으므로 이상적으로는 이것이 대용량 파일을 처리할 수 있을 것입니다.

답변1

5번째 바이트를 원하면 1부터 세기 시작하세요.

dd ibs=1 skip=4 count=1

또는

tail -c +5 | head -c 1

계산 은 tail1부터 시작하므로 포함된 파일이 주어지면 abcdefg인쇄됩니다 e.

dd그리고 tail -cPOSIX에서. head -c일반적이지만 POSIX에는 없습니다. GNU coreutils, BusyBox, FreeBSD 및 NetBSd에는 있지만 OpenBSD나 Solaris에는 없습니다.

답변2

그리고 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

답변3

또는 (gnu)grep을 사용하십시오:

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

( 5번째 문자를 -z처리하기 전에 사용됨 )\n

관련 정보