检查文件内容的长度是否为 X 且仅包含特定字符

pol*_*lym 4 shell string

比方说,我的文件只包含一个 docker id:

myid.id

28fe2baadbe8da32ed0b99c69b11c01b2d141bc5b732b81e0960086de52fc891
Run Code Online (Sandbox Code Playgroud)

我想检查的内容my.id是否正好是64字符长,并且只包含 [0-9] 和 [az](可能是 [af])范围内的字符。

  • 我怎样才能做到这一点?
  • 如果文件包含换行符0x0a,我如何在此检查中包含/排除它?

cuo*_*glm 5

尝试:

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

perl改用。

包括换行符:

perl -ne 'print if length == 64 and /^[[:xdigit:]]+$/'
Run Code Online (Sandbox Code Playgroud)

排除换行符:

perl -nle 'print if length == 64 and /^[[:xdigit:]]+$/'
Run Code Online (Sandbox Code Playgroud)


ste*_*ver 5

全行grep怎么样

grep -qxE '[[:xdigit:]]{64}' myid.id && echo "yes"
Run Code Online (Sandbox Code Playgroud)

或(不确定这个)特定于 bash 的

IFS= read -r id < myid.id 
[[ ${#id} -eq 64 ]] && [[ $id =~ [[:xdigit:]]{64} ]] && echo "yes"
Run Code Online (Sandbox Code Playgroud)