检查文件内容的长度是否为 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

整行 grep 怎么样?

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然后更改[:alnum:][:xdigit:].尽管值得一提的是任何使用 POSIX 类的应用程序[:alnum:] 和/或 [:xdigit:]也会匹配A-[ZF]- 这是规范的一部分...如果这是一个问题,您可能需要再添加一个测试,例如:

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

答案4

试试这个:

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

相关内容