比方说,我有只包含一个 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