it-swarm-ko.tech

파이프에서 문자열의 첫 번째 [x] 문자를 가져옴

명령 (한 줄)에서 실제로 긴 출력을 얻었지만 출력의 첫 번째 [x] 문자 (8)를 원한다는 것을 알고 있다면 그것을 얻는 가장 쉬운 방법은 무엇입니까? 구분자가 없습니다.

67
xenoterracide

한 가지 방법은 cut를 사용하는 것입니다.

 command | cut -c1-8

각 출력 줄의 처음 8자를 제공합니다. cut는 POSIX의 일부이므로 대부분 Unices에있을 수 있습니다.

95
Steven D

이것들은 처음 8자를 얻는 다른 방법입니다.

command | head -c8

command | awk '{print substr($0,1,8);exit}' 

command | sed 's/^\(........\).*/\1/;q'

그리고 배쉬가 있다면

var=$(command)
echo ${var:0:8}
26
user1606

매개 변수 확장

echo ${Word:0:x}

EG: Word="Hello world"
echo ${Word:0:3} or echo ${Word::3} 
o/p: Hel


EG.2: Word="Hello world"
echo ${Word:1:3}
o/p: ell
2
Prabhat Kumar Singh

충분히 고급 셸이있는 경우 (예를 들어, 대시에서 확실하지 않은 Bash에서 다음이 작동 함) 할 수 있습니다.

read -n8 -d$'\0' -r <(command)

read ... <(command)을 실행하면 캐릭터는 REPLY 쉘 변수에있게됩니다. 다른 옵션에 대해 알아 보려면 help read를 입력하십시오.

설명 : read에 대한 -n8 인수는 최대 8자를 원한다고 말합니다. -d$'\0'는 줄 바꿈이 아니라 null이 될 때까지 읽습니다. 이런 식으로 이전 문자 중 하나가 개행 문자이지만 널이 아닌 경우에도 8자를 계속 읽습니다. -n8 -d$'\0'의 대안은 정확히 8 자 또는 stdin이 EOF에 도달 할 때까지 읽는 -N8를 사용하는 것입니다. 구분 기호가 없습니다. 아마도 여러분의 요구에 더 잘 맞을 수도 있지만 -N-n를 존중하는 것과는 달리 -d를 읽은 쉘이 얼마나 많은지 잘 모릅니다. 설명을 계속하면 : -r\-이스케이프를 무시하므로, \\를 단일 \.

마지막으로, 우리는 command | read ... 대신 read ... <(command)을 수행합니다. 두 번째 형식에서는 읽기가 서브 쉘에서 실행 된 후 즉시 종료되어 방금 읽은 정보가 손실되기 때문입니다.

또 다른 옵션은 서브 쉘 내에서 모든 처리를 수행하는 것입니다. 예를 들면 다음과 같습니다.

$ echo abcdefghijklm | { read -n8 -d$'\0' -r; printf "REPLY=<%s>\n" "$REPLY"; }
REPLY=<abcdefgh>
2
dubiousjim

이것은 휴대용입니다.

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

가변 길이의 문자로 구성된 문자열을 만들려면 자신의 질문이 있습니다 가 있습니다.

1
user79743

Maven 저장소에서 체크섬 파일을 수동으로 생성 할 때이 문제가 발생했습니다. 불행히도 cut -c는 항상 출력 끝에 줄 바꿈을 인쇄합니다. xxd를 사용하지 않도록하려면 :

command | xxd -l$BYTES | xxd -r

정확히 $BYTES 바이트. command의 출력이 더 짧은 경우가 아니면 정확히 해당 출력입니다.

0