首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在索引处插入一个字符串并检查它是否在01-12范围内.如何在外壳中实现?

在索引处插入一个字符串并检查它是否在01-12范围内.如何在外壳中实现?
EN

Unix & Linux用户
提问于 2022-12-08 16:48:04
回答 1查看 44关注 0票数 -1

我有一根绳子:

代码语言:javascript
运行
复制
bDate = 20221201

我想要检查在5-6的char是否在01到12的范围内,这个例子应该与12匹配。对于20221309,如果应该说5-6的char不在01到12的范围内。我使用的是在shell中的剪切。

EN

回答 1

Unix & Linux用户

发布于 2022-12-08 17:42:44

使用GNU awk

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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"}}'

使用珀尔

代码语言:javascript
运行
复制
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"}'

使用纯bash

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/727781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档