cat 명령에서 첫 번째 X 문자를 얻습니까? 시도 cat ${filename} cut -c1-50했지만

쉘 스크립트에서 변수로 출력하는 텍스트 파일이 있습니다. 그러나 처음 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}"

이것은 다음을 가정합니다.

  1. 당신이 사용하고 ksh93, bash(또는 최근 zsh또는 mksh지원하는 유일한 멀티 바이트 문자 집합 생각하는 것은 ( mkshUTF-8 만 이후 set -o utf8-mode및 버전)) head가 지원 -c(대부분의 요즘,하지만 엄격하게 표준되지 않음).
  2. 현재 로케일은 파일과 동일한 인코딩으로 설정됩니다 (유형 locale charmapfile -- "$filename"확인). 그렇지 않으면 ie로 설정하십시오. LC_ALL=en_US.UTF-8)
  3. 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. 이진 데이터의 경우 hexdump16 진 문자로 인쇄하는 데 사용하십시오 .

hexdump -n 50 -v file.bin

예를 들어 file.bin의 처음 50 바이트를 인쇄합니다.

-vverbose 옵션 을 사용하지 않으면 hexdump반복되는 줄이 별표 ( *)로 바뀝니다. 여기를 참조하십시오 https://superuser.com/questions/494245/what-does-an-asterisk-mean-in-hexdump-output/494613#494613 .


답변

sed를 사용하면 문제를 쉽게 해결할 수 있습니다.

sed -e 's/^\(.\{50\}\).*/\1/' yourfile