文字列があります。
bDate = 20221201
5-6の文字が01から12の範囲にあることを確認したいと思います。この例では、12と一致する必要があります。 20221309の場合、5〜6の文字が01〜12の範囲に属していないと言うべきですか?私はシェルにカットを使用しています。
ベストアンサー1
GNUの使用awk
:
printf '%s\n' 20221201 | awk '
{match($0, /^[0-9]{4}([0-9]{2})[0-9]{2}/, a)
if (a[1] > 0 && a[1] <= 12) {print a[1] " in range"}
else{print a[1] " not in range"}}'
変数名が文字列の一部である場合は削除します。アンカー ^
そしてBSD awk
:
printf '%s\n' 20221201 |
awk '(length($0) != 8 || ! match($0, /^[0-9]{4}[0-9]{2}[0-9]{2}/))
{print "wrong input"; exit}
var = substr($0, 5, 2)
if (var > 0 && var <= 12) {print var " in range"}
else{print var " not in range"}}'
そして真珠:
printf '%s\n' 20221201 |
perl -nE 'my $m = $1 if /^\d{4}(\d{2})\d{2}/;
if ($m > 0 && $m <= 12) { say "$m in range" } else {say "$m not in range"}'
ユチョン強く打つ:
bDate=20221201
[[ $bDate =~ ^[0-9]{4}([0-9]{2})[0-9]{2} ]] || { echo "wrong input"; exit; }
if ((${BASH_REMATCH[1]} > 0 && ${BASH_REMATCH[1]} <=12)); then
echo "${BASH_REMATCH[1]} in range"
else
echo "${BASH_REMATCH[1]} not in range"
fi