명령줄만 사용하여 특정 위치의 문자를 인쇄하고 싶습니다. 예를 들어:
<command> 5
a
파일의 5번째 문자가 출력되면 a
.
저는 대용량 파일을 다루고 있으므로 이상적으로는 이것이 대용량 파일을 처리할 수 있을 것입니다.
답변1
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에는 없습니다.
답변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