
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]
。これは仕様の一部です...これが問題の場合は、もう1つのテストを追加する必要があるかもしれません。たとえば、次のようになります。
...&& [ -n "${s##*[[:upper:]]*}" ] &&...
答え4
この試み:
echo 28fe2baadbe8da32ed0b99c69b11c01b2d141bc5b732b81e0960086de52fc891 | grep [:0-9a-z:] | wc -c