Bash字符串处理(与Java对照) - 22.判断字符串是否数字串

Bash字符串处理(与Java对照) - 22.判断字符串是否数字串

In Java

用正则表达式匹配方式判断字符串是否数字串

String str = "1234";

if (str.matches("\\d+")) {

    // matched, it's digit string

}

 

In Bash

使用模式匹配(Pattern Matching)判断字符串是否数字串

方法:[[ $STR != *[!0-9]* ]]

解读:$STR != *[!0-9]* 表示不匹配非数字串,反过来讲就是只匹配数字串。

方法:[[ ! $STR == *[!0-9]* ]]

解读:$STR == *[!0-9]* 表示只要包含非数字字符就为真,前面加上!操作符,表示相反,也就是说只有当全部是数字字符时才为真。

man bash 写道
[[ expression ]]
              When  the  == and != operators are used, the string to the right
              of the operator is considered a pattern and matched according to
              the  rules  described  below under Pattern Matching.  The return
              value is 0 if the string matches or does not match the  pattern,
              respectively,  and  1 otherwise.  Any part of the pattern may be
              quoted to force it to be matched as a string.
 

 

[root@smsgw root]# STR=12345
[root@smsgw root]# [[ $STR != *[!0-9]* ]] && echo "yes"
yes
[root@smsgw root]# [[ ! $STR == *[!0-9]* ]] && echo "yes"
yes
[root@smsgw root]# STR=12345a
[root@smsgw root]# [[ $STR != *[!0-9]* ]] && echo "yes"  
[root@smsgw root]# [[ ! $STR == *[!0-9]* ]] && echo "yes"
[root@smsgw root]# STR=abcd
[root@smsgw root]# [[ $STR != *[!0-9]* ]] && echo "yes"  
[root@smsgw root]# [[ ! $STR == *[!0-9]* ]] && echo "yes"
[root@smsgw root]# 

 

 

使用正则表达式匹配判断字符串是否数字串(Bash 3.0)

格式:[[ $STR =~ ^[0-9]+$ ]]

格式:[[ $STR =~ ^[[:digit:]]+$ ]]

man bash 写道
[[ expression ]]
              An  additional  binary  operator,  =~,  is available, with the same precedence as == and !=.  When it is
              used, the string to the right of the operator is considered an extended regular expression  and  matched
              accordingly (as in regex(3)).  The return value is 0 if the string matches the pattern, and 1 otherwise.
              If the regular expression is syntactically incorrect, the conditional expression’s return  value  is  2.

 

[root@jfht ~]# STR=12345

[root@jfht ~]# [[ $STR =~ ^[0-9]+$ ]] && echo "yes"
yes
[root@jfht ~]# [[ $STR =~ ^[[:digit:]]+$ ]] && echo "yes"
yes
[root@jfht ~]# STR=12345a
[root@jfht ~]# [[ $STR =~ ^[0-9]+$ ]] && echo "yes"      
[root@jfht ~]# [[ $STR =~ ^[[:digit:]]+$ ]] && echo "yes"
[root@jfht ~]# STR=abcd
[root@jfht ~]# [[ $STR =~ ^[0-9]+$ ]] && echo "yes"      
[root@jfht ~]# [[ $STR =~ ^[[:digit:]]+$ ]] && echo "yes"
[root@jfht ~]#

 

注意:Bash 3.0 以上才支持,下面是在 Bash 2.0 下执行的结果。

[root@smsgw root]# STR=12345
[root@smsgw root]# [[ $STR =~ ^[0-9]+$ ]] && echo "yes"
-bash: conditional binary operator expected
-bash: syntax error near `=~'
[root@smsgw root]#

 

 

使用sed -n /re/p 来判断字符串是否数字串

格式:[ "$(sed -n "/^[0-9]\+$/p" <<< "$STR")" ]

格式:[ "$(echo "$STR" | sed -n "/^[0-9]\+$/p")" ]

man sed 写道
       -n, --quiet, --silent
              suppress automatic printing of pattern space
       /regexp/
              Match lines matching the regular expression regexp.
       p      Print the current pattern space.
 

[root@jfht ~]# STR=12345
[root@jfht ~]# [ "$(sed -n "/^[0-9]\+$/p" <<< "$STR")" ] && echo "yes"
yes
[root@jfht ~]# [ "$(echo "$STR" | sed -n "/^[0-9]\+$/p")" ] && echo "yes"  
yes
[root@jfht ~]# STR=12345a
[root@jfht ~]# [ "$(sed -n "/^[0-9]\+$/p" <<< "$STR")" ] && echo "yes"      
[root@jfht ~]# [ "$(echo "$STR" | sed -n "/^[0-9]\+$/p")" ] && echo "yes"
[root@jfht ~]# STR=abcd
[root@jfht ~]# [ "$(sed -n "/^[0-9]\+$/p" <<< "$STR")" ] && echo "yes"   
[root@jfht ~]# [ "$(echo "$STR" | sed -n "/^[0-9]\+$/p")" ] && echo "yes"
[root@jfht ~]#

 

 

使用 grep/egrep 来判断字符串是否数字串

格式:grep -q "^[0-9]\+$" <<< "$STR"

格式:egrep -q "^[0-9]+$" <<< "$STR"

man grep 写道
Egrep is the same as grep -E.

       -E, --extended-regexp
              Interpret PATTERN as an extended regular expression (see below).

       -e PATTERN, --regexp=PATTERN
              Use PATTERN as the pattern; useful to protect patterns beginning with -.

       -q, --quiet, --silent
              Quiet;  do  not  write  anything  to standard output.  Exit immediately with zero status if any match is
              found, even if an error was detected.  Also see the -s or --no-messages option.
 

 

[root@jfht ~]# STR=123456
[root@jfht ~]# egrep "^[0-9]+$" <<< "$STR"
123456
[root@jfht ~]# grep "^[0-9]\+$" <<< "$STR"
123456
[root@jfht ~]#

 

 

本文链接:http://codingstandards.iteye.com/blog/1212725   (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录) 

上节内容:Bash字符串处理(与Java对照) - 21.字符串正则匹配

下节内容:Bash字符串处理(与Java对照) - 23.字符串替换、子串删除、子串截取

 

 

分布式协作方案:OpenClaw多节点部署与设备互联 主从架构或对等架构服务发现与注册机制负载均衡策略选择分布式任务队列优先级调度失败重试机制WebSocket实时通信数据同步引擎冲突解决策略健康检查机制故障自动转移数据复制与恢复通过分布式部署,OpenClaw可以支撑更大规模的业务场景,提供更稳定可靠的AI助手服务。在下一篇文章中,我们将深入探讨安全与权限管理的精细化策略。 阅读详情

相关推荐

JSON(详解)

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它以易于阅读和编写的文本格式来存储和表示数据,通常用于在不同的系统之间进行数据交换。JSON数据以键-值对的形式组织,可以包含对象、数组、字符串、数字等基本数据类型。它经常在Web开发、API通信等领域被广泛使用。

7702

bash grep 判断_Shell中判断字符串是否为数字的6种方法分享

#!/bin/bash## 方法1a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] && echo string a is numbers第一个-n是shell的测试标志,对后面的串"`sed -n '/^[0-9][0-9]*$/p'`" 进行测试,如果非空,则结果为真。sed默认会显示所有输入行信息的,sed 的“-n”...

weixin_33308507的博客 1235

写一个b站爬虫(思路)

part 0 安装 scrapy, requests part 1 信息获取 打开番剧索引链接(https://www.bilibili.com/anime/index/) F12控制台,选中NETWORK,来到xhr文件,我们可以找到了存放番剧json的地方

kou的博客 484

shell脚本之判断用户输入的是否是数字

case语句练习

qq_45429357的博客 761

重头开始学ROS(8)---LVI-SAM复现与实机部署Ubuntu20.04以及如何适配6轴imu

本文详细记录了在Ubuntu20.04环境下复现LVI-SLAM系统的过程,主要包含四个部分:源码编译、问题解决、数据录制和6轴IMU适配。在编译过程中遇到GTSAM、PCL版本、OpenCV路径等典型问题并给出解决方案;详细说明了ROS bag包的录制规范;针对6轴IMU硬件限制,提供了核心代码修改方案。文章为LVI-SLAM系统在非标准环境下的部署提供了实用参考,特别适合需要适配不同硬件配置的研究者。

qq_73991479的博客 1558

Bash Shell判断输入的是否是数字,并判断是否是偶数

check_even_num.sh #! /bin/bash if [ $# != 1 ] ; then echo wrong arg,please input one arg exit 1; fi sh check_num.sh -i $1 #执行check_num脚本,如果返回0,则说明是数字 if [ $? == 0 ] ; then #是数字,判断是否是偶数

lu188887的专栏 2万+

【机器学习概率统计】11 贝叶斯统计推断:最大后验

这一节,我们来介绍另外一种统计推断方法:贝叶斯统计推断方法。 1.回顾贝叶斯定理 首先,我们先来复习一下贝叶斯定理: p(Θ∣X)=p(X∣Θ)p(Θ)p(X)p(\Theta|X)=\frac{p(X|\Theta)p(\Theta)}{p(X)}p(Θ∣X)=p(X)p(X∣Θ)p(Θ)​ 在这个简简单单的式子当中,蕴含了我们要掌握的很多重要内容: 贝叶斯定理当中的四个概率表达式,他们都非常重要,在这一节的内容中将反复出现,我们来一一解析一下: p(Θ)p(\Theta)p(Θ):先验分布。 反映的是在

机器学习数学基础系列专栏 3270

判断输入的键值是否为数字——shell脚本

上课写的小脚本 #!/bin/bash #zou read -p "请输入:" num if [[ "$num" =~ ^[0-9]+$ ]]; then echo "输入的数字是$num" else echo "输入的不是数字" fi

sehn_的博客 1943

uniapp(微信小程序) - 实现uniapp小程序电子签名板,横屏手写姓名签名专用写字画板,客户专用签字板,手写签名签字画板组件,手写签名,(详细运行示例,一键复制开箱即用)

uniapp实现微信小程序的电子签名效果,uniapp微信小程序 电子签名 写字板,用uniapp实现微信小程序的电子签名,uniapp微信小程序canvans实现手写签名,记录一个uniapp写的小程序的手写板,横屏,用于签名,unniapp实现电子签名,uniapp怎么做横屏的手写签名,uniapp如何实现签字板,uniapp小程序平台下怎么做电子签名板组件,uniapp电子签名插件,uniapp最好用的电子写字板插件组件源码,实现uniapp 手写签名功能,手写板、签字板,uni-app插件市场最好的

✅ 精选推荐文章 1万+

UE4打包为Framework库嵌入iOS原生工程

UE4打包为Framework库嵌入iOS原生工程

tangfuling1991的博客 1294

判断用户输入的是否为数字

【代码】判断用户输入的是否为数字。

sadjjkj的博客 894

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java程序员的Bash实用指南系列之字符串处理(目录)

Java程序员的Bash实用指南系列之字符串处理(目录) 文章   在一般的计算机编程语言中,字符串处理是很重要的一块,Bash也是如此,如果掌握了字符串的处理,基本上就能够应付大部分的编程工作了。在Unix/Linux操作系统中,很多时候需要使用多个命令一起配合才能完成一个较复杂的任务,Shell提供了管道线、重定向、结构化编程等方式,把这些命令粘合在一起。因此,命令之间的接口数据的处理

Nicholas的专栏 QQ1295794532 1139

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

全网最强Docker教程 | 万字长文爆肝Docker教程

Docker是一种容器化技术,提供完整的容器解决方案,能够实现环境一致性、进程隔离和高效部署。相比传统虚拟机,Docker更轻量、启动更快且资源占用更少。其核心架构包括镜像(只读应用环境)、容器(运行中的镜像)、仓库(存放镜像的位置)和DockerFile(自定义镜像配置文件)。Docker的安装可通过官方脚本或手动配置完成,适用于Linux系统,能显著提升开发和运维效率。

qq_45832461的博客 1527

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

bash之通配符

为什么要写这篇文章 我相信很多人和我一样,天天在使用linux的shell命令,也大概知道有通配符这么个概念,不过比较模糊。平时也会使用简单的通配符,也许还知道有正则表达式的存在,甚至不清楚两者的区别,往往搞混淆。 我也是同样的问题,从来没有好好地静下心来总结这些东西。其实学习东西还是要踏实,这样才能发挥工具最大的作用,不是吗?本篇文章就shell的通配符来做个总结,方便以后自己查找记忆。注意...

astrotycoon 1万+

bash 5.2中文修订4

复合命令是 shell 编程语言的结构。每个构造都以保留字或控制运算符开始,并以相应的保留字或运算符终止。与复合命令关联的任何重定向(请参阅 Redirections )都适用于该复合命令中的所有命令,除非显式覆盖。在大多数情况下,复合命令描述中的命令列表可以通过一个或多个换行符与命令的其余部分分隔开,并且后面可以用换行符代替分号。Bash 提供循环结构、条件命令以及对命令进行分组并将其作为一个单元执行的机制。Bash 支持以下循环结构。请注意,无论何处 ‘;’(分号) 出现在命令语法的描述中,它可以被一个

gu720226的博客 2720

shell之匹配模式和扩展匹配模式

首先说一下什么是匹配模式,然后再介绍扩展匹配模式。 匹配模式这个概念就算不知道,但是也都会使用这个功能找到匹配的文件。 例如 ls ab*,找到所有以ab开头的文件。这就是利用了*可以匹配任意字符串,包括空串。 匹配模式是man bash中的pattern matching,星号的含义在上面讲了。 ?用来匹配任意单个字符,例如a?c可以匹配到abc,adc,不能匹配空字符,所有不能匹配ac […] 用来匹配中括号中的一个字符,例如a[bc]d,可以匹配abd和acd 如果想匹配* ?[]呢,需要用反斜杠进行

冬木 740

bash字符串截取、匹配

目录截取字符串1. 指定字符匹配字符串2. 指定位置截取字符串匹配特定起始/结尾/子串1. 比较 ==2. 正则匹配 截取字符串 1. 指定字符匹配字符串 # 去左留右, % 去右留左,不匹配则保留整个字符串 $ string='A/a/b/c/d/D' $ echo ${string#*/} a/b/c/d/D $ echo ${string##*/} D $ echo ${string%/*} A/a/b/c/d $ echo ${string%%/*} A $ echo ${string%%a/*}

guhong1990的博客 2437

Bash的字符串匹配共有6种形式

Bash的字符串匹配共有6种形式:1. ${variable#pattern}如果pattern匹配variable的开始部分,从variable的开始处删除字符直到第一个匹配的位置,包括匹配部分,返回剩余部分。2. ${variable##pattern}如果pattern匹配variable的开始部分,从variable的开始处删除字符直到最后一个匹配的位置,包括匹配部分,返回剩余部分。3.

aaaaatiger--寻路 1946

Shell中判断字符串是否为数字的6种方法分享

本篇文章主要介绍了”shell 判断字符串是否为数字”,主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下。 #!/bin/bash ## 方法1 a=1234;echo &quot;$a&quot;|[ -n &quot;`sed -n '/^[0-9][0-9]*$/p'`&quot; ] &amp;amp;&amp;amp; echo string a is number...

凌风探梅的专栏 9679

conditional binary operator expected

执行脚本报错误如下:install.sh: line 456: conditional binary operator expectedinstall.sh: line 456: syntax error near `=~'通过...

congshanlan2358的博客 3754

shell 判断字符串是否为数字

#!/bin/bash          ## 方法1 a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] && echo string a is numbers     第一个-n是shell的测试标志,对后面的串"`sed -n '/^[0-9][0-9]*$/p'`" 进行测试,如果非

beckdon的专栏 1万+

Shell中判断输入变量是否为数字两种简单方法

expr判断 shell中对数字判断最有效、最直接的方法就是利用expr进行$?返回值来判断输入的变量是否为数字变量。 例如: #! /bash/bin read -t30 -p "input your number:" a expr $a + 1 &> /dev/null #这里是使用expr对任意数字与变量a进行计算得出返回值 [ $? == 0 ] && ech...

weixin_42301996的博客 7566
上一篇: Bash字符串处理(与Java对照) - 21.字符串正则匹配
下一篇: MongoDB非正常关闭后修复记录
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值