명령 (한 줄)에서 실제로 긴 출력을 얻었지만 출력의 첫 번째 [x] 문자 (8)를 원한다는 것을 알고 있다면 그것을 얻는 가장 쉬운 방법은 무엇입니까? 구분 기호가 없습니다.
명령 (한 줄)에서 실제로 긴 출력을 얻었지만 출력의 첫 번째 [x] 문자 (8)를 원한다는 것을 알고 있다면 그것을 얻는 가장 쉬운 방법은 무엇입니까? 구분 기호가 없습니다.
답변:
한 가지 방법은 다음을 사용하는 것입니다 cut
.
command | cut -c1-8
각 출력 줄의 처음 8자를 제공합니다. cut
POSIX의 일부 이기 때문에 대부분의 Unices에있을 가능성이 큽니다.
cut -c
문자 를 선택합니다. cut -b
또는 head -c
바이트를 선택합니다. 이것은 일부 로케일 (실제로 UTF-8을 사용할 때)에서 차이를 만듭니다.
cut -c-8
1에서 8까지 선택할 것입니다.
cut
의 Windows와 동일합니까?
command | dd bs=8 count=1 2>/dev/null
. 짧거나 우수하다고 말하지 않습니다. 또 다른 대안.
cut
에서는 cut -c
작동합니다 cut -b
(즉, 멀티 바이트 문자에 대해서는 제대로 작동하지 않음).
이것들은 처음 8자를 얻는 다른 방법입니다.
command | head -c8
command | awk '{print substr($0,1,8);exit}'
command | sed 's/^\(........\).*/\1/;q'
그리고 배쉬가 있다면
var=$(command)
echo ${var:0:8}
command | sed 's/\(.\{8\}\).*/\1/'
또는 sed가 그것을 지원한다면 : command | sed -r 's/(.{8}).*/\1/'
; 그렇지 않으면 +1
head -c
수 를 계산 합니다 . 마찬가지로 주요 Awk 구현 중 GNU awk 만 멀티 바이트 문자를 올바르게 처리합니다. FreeBSD Awk와 Mawk는 그렇지 않습니다.
충분히 고급 쉘을 가지고 있다면 (예를 들어, 대시에서 확실하지 않은 Bash에서 다음과 같이 작동합니다) 할 수 있습니다 :
read -n8 -d$'\0' -r <(command)
실행 후 read ... <(command)
문자는 쉘 변수에있게 REPLY
됩니다. help read
다른 옵션에 대해 배우려면 입력하십시오 .
설명 : 우리가 최대 8 문자를 원한다는 -n8
주장 read
. 는 -d$'\0'
널 때까지보다는 개행 읽어 말한다. 이런 식으로 이전 문자 중 하나가 개행 문자이지만 널이 아닌 경우에도 8자를 계속 읽습니다. 에 대한 대안은 -n8 -d$'\0'
사용하는 것입니다 -N8
정확히 8 자 또는 표준 입력이 EOF에 도달 할 때까지 읽는. 구분 기호가 없습니다. 그것은 아마도 더 나은 당신의 요구에 맞는, 그러나 나는 명예 읽기가 즉석 얼마나 많은 포탄 모르는 -N
명예를 반대 -n
와 -d
. 설명을 계속하십시오. -r
ignore \
-escapes 라고 말하면 예를 들어 \\
단일 문자가 아닌 두 문자로 처리 됩니다 \
.
마지막으로, 우리가 할 read ... <(command)
것이 아니라 command | read ...
때문에 두 번째 형태로, 읽기는 방금 읽은 정보가 손실, 즉시 종료되는 서브 쉘에서 실행됩니다.
또 다른 옵션은 서브 쉘 내에서 모든 처리를 수행하는 것입니다. 예를 들면 다음과 같습니다.
$ echo abcdefghijklm | { read -n8 -d$'\0' -r; printf "REPLY=<%s>\n" "$REPLY"; }
REPLY=<abcdefgh>
cut
.
read -n <num>
. 작은주의 사항 : Bash 3.x (여전히 OS의 현재)는 실수 <num>
로 바이트 수로 해석 되어 멀티 바이트 문자로 실패합니다. 이것은 Bash 4.x에서 수정되었습니다.
이것은 휴대용입니다.
a="$(command)" # Get the output of the command.
b="????" # as many ? as characters are needed.
echo ${a%"${a#${b}}"} # select that many chars from $a
가변 길이의 문자로 구성된 문자열을 만들려면 여기에 자체 질문이 있습니다 .
maven 저장소에서 체크섬 파일을 수동으로 생성 할 때이 문제가 발생했습니다. 불행히도 cut -c
항상 출력 끝에 줄 바꿈을 인쇄합니다. 내가 사용하는 것을 억제하려면 xxd
:
command | xxd -l$BYTES | xxd -r
의 출력이 더 짧은 경우가 아니면 정확히 해당 출력이 $BYTES
아닌 한 정확하게 바이트 command
를 출력합니다.
cut
후행 줄 바꿈 을 해제하는 또 다른 방법 은 다음과 같이 | tr -d '\n'