파일 내용이 길이 X이고 특정 문자만 포함되어 있는지 확인하세요.

파일 내용이 길이 X이고 특정 문자만 포함되어 있는지 확인하세요.

Docker ID만 포함된 파일이 있다고 가정해 보겠습니다.

myid.id:

28fe2baadbe8da32ed0b99c69b11c01b2d141bc5b732b81e0960086de52fc891

my.id내용이 정확히 64문자 길이이고 [0-9] 및 [az] 범위(아마도 [af])의 문자만 포함되어 있는지 확인하고 싶습니다 .

  • 어떻게 해야 하나요?
  • 파일에 개행 문자가 포함된 경우 0x0a이 검사에 이를 포함/제외하려면 어떻게 해야 합니까?

답변1

노력하다:

$ echo 28fe2baadbe8da32ed0b99c69b11c01b2d141bc5b732b81e0960086de52fc891 | 
awk '{sub(/\r/,"")} length == 64 && /^[[:xdigit:]]+$/'
28fe2baadbe8da32ed0b99c69b11c01b2d141bc5b732b81e0960086de52fc891

아니면 대신 사용하십시오 perl.

개행 포함:

perl -ne 'print if length == 64 and /^[[:xdigit:]]+$/'

개행 제외:

perl -nle 'print if length == 64 and /^[[:xdigit:]]+$/'

답변2

전체 라인을 greping하는 것은 어떻습니까?

grep -qxE '[[:xdigit:]]{64}' myid.id && echo "yes"

또는 (확실하지 않음) bash 특정

IFS= read -r id < myid.id 
[[ ${#id} -eq 64 ]] && [[ $id =~ [[:xdigit:]]{64} ]] && echo "yes"

답변3

read s <./file
[ ${#s} -eq 64 ] &&
[ -n "${s##*[![:alnum:]]*}" ] && 
echo success\!

테스트를 다음으로 제한하기로 결정한 경우AF그런 다음 POSIX 클래스를 사용하는 모든 애플리케이션을 언급 [:alnum:][:xdigit:]가치가 있지만 .[:alnum:] 그리고/또는 [:xdigit:]또한 일치합니다 A-[ZF]. 이것은 사양의 일부입니다... 이것이 문제인 경우 테스트를 하나 더 추가해야 할 수도 있습니다. 예를 들면 다음과 같습니다.

...&& [ -n "${s##*[[:upper:]]*}" ] &&...

답변4

이 시도:

 echo 28fe2baadbe8da32ed0b99c69b11c01b2d141bc5b732b81e0960086de52fc891 | grep [:0-9a-z:] |  wc -c

관련 정보