쉘 스크립트에서 변수로 출력하는 텍스트 파일이 있습니다. 그러나 처음 50 자만 필요합니다.
사용을 시도 cat ${filename} cut -c1-50
했지만 처음 50 자 이상을 사용하고 있습니까? cut
이 텍스트 파일은 하나의 긴 문자열 일 수 있지만 실제로 의존하는 행 을 찾은 것일 수 있습니다 (100 % 확실하지 않음).
cat
명령 에서 첫 번째 X 문자를 얻기 위해 파이프로 연결할 수있는 유틸리티가 있습니까?
답변
head -c 50 file
처음 50 바이트를 반환합니다.
모든 OS에서 명령이 항상 동일하게 구현되는 것은 아닙니다. Linux 및 macOS에서는이 방식으로 작동합니다. Solaris (11)에서 / usr / gnu / bin /의 gnu 버전을 사용해야합니다.
답변
당신의 cut
당신이 그것에 데이터를 전달하는 파이프를 사용하는 경우 명령은 작동합니다 :
cat ${file} | cut -c1-50
또는 쓸모없는 고양이 사용을 피하고 조금 더 안전하게 만듭니다.
cut -c1-50 < "$file"
위의 명령 은 각 입력 행 의 처음 50 자 (또는 cut
구현 에 따라 바이트)를 인쇄합니다 . 말한 것처럼 파일이 큰 줄이면 예상대로해야합니다.
답변
dd status=none bs=1 count=50 if=${filename}
처음 50 바이트를 반환합니다.
답변
지금까지 대부분의 답변은 1 바이트 = 1 문자로 가정하며 ASCII가 아닌 로케일을 사용하는 경우에는 그렇지 않을 수 있습니다.
약간 더 강력한 방법 :
testString=$(head -c 200 < "${filename}") &&
printf '%s\n' "${testString:0:50}"
이것은 다음을 가정합니다.
- 당신이 사용하고
ksh93
,bash
(또는 최근zsh
또는mksh
지원하는 유일한 멀티 바이트 문자 집합 생각하는 것은 (mksh
UTF-8 만 이후set -o utf8-mode
및 버전))head
가 지원-c
(대부분의 요즘,하지만 엄격하게 표준되지 않음). - 현재 로케일은 파일과 동일한 인코딩으로 설정됩니다 (유형
locale charmap
및file -- "$filename"
확인). 그렇지 않으면 ie로 설정하십시오.LC_ALL=en_US.UTF-8
) head
모든 문자가 최대 4 바이트로 인코딩되는 최악의 경우 UTF-8을 가정 하여 파일의 처음 200 바이트를 사용했습니다 . 이것은 내가 생각할 수있는 대부분의 경우를 다루어야합니다.
답변
grep -om1 "^.\{50\}" ${filename}
다른 변형 (파일의 첫 줄)
(IFS= read -r line <${filename}; echo ${line:0:50})
답변
1. ASCII 파일의 경우 @DisplayName과 같이 수행하십시오 .
head -c 50 file.txt
예를 들어 file.txt의 처음 50자를 인쇄합니다.
2. 이진 데이터의 경우 hexdump
16 진 문자로 인쇄하는 데 사용하십시오 .
hexdump -n 50 -v file.bin
예를 들어 file.bin의 처음 50 바이트를 인쇄합니다.
-v
verbose 옵션 을 사용하지 않으면 hexdump
반복되는 줄이 별표 ( *
)로 바뀝니다. 여기를 참조하십시오 https://superuser.com/questions/494245/what-does-an-asterisk-mean-in-hexdump-output/494613#494613 .
답변
sed를 사용하면 문제를 쉽게 해결할 수 있습니다.
sed -e 's/^\(.\{50\}\).*/\1/' yourfile