`

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.字符串替换、子串删除、子串截取

 

 

3
2
分享到:
评论

相关推荐

    bash-3.1-MSYS-1.0.11-snapshot.tar

    bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 ffmpeg 安装用包!

    fmath-mathml-java.jar.rar

    通过这个工具,你可以将LaTeX公式转换为MathML,或者将MathML代码转化为LaTeX字符串,从而在不同环境下灵活运用。 三、LaTeX到MathML的转换 在LaTeX到MathML的转换过程中,`fmath-mathml-java.jar`首先解析LaTeX...

    openjdk-17.0.2(openjdk-17.0.2_macos-aarch64_bin.tar.gz)

    3. **文本块(Text Blocks)**:Java 13 引入的新语法特性,使得多行字符串的编写更加直观,减少了转义字符的困扰。 4. **记录类(Record Classes)**:Java 14 添加的记录类简化了创建不可变数据对象的过程,自动...

    centos安装jdk1.8时出现没有/lib/ld-linux.so.2:这个文件的原因分析

    -bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...

    libaio-devel-0.3.106(i386 x86_64)

    ```bash rpm -ivh libaio-devel-0.3.106-3.2.i386.rpm ``` 而对于 x86_64 系统,则是: ```bash rpm -ivh libaio-devel-0.3.106-3.2.x86_64.rpm ``` 安装完成后,libaio-devel 提供的头文件(如 `libaio.h`)和开发...

    mysql-connector-java-8.0.13.jar

    MySQL Connector/J 8.0.13 是MySQL数据库与Java应用程序之间的重要桥梁,它是Oracle官方提供的用于Java平台的MySQL驱动程序。这个jar包允许开发者在Java应用中执行SQL语句,进行数据的读取、写入和管理MySQL数据库。...

    fontconfig-2.13.0-4.3.el7.x86_64.zip

    在Linux系统中,字体管理是实现正确显示各种字符集,包括中文字符,的关键部分。`fontconfig`是一个开源的字体配置库,它负责管理和查找系统中的字体,为应用程序提供统一的接口来处理字体问题。在没有互联网连接...

    Java-JDK-11.0.8(Windows &amp;amp; Mac os) 下载

    5. **文本块(Text Blocks)**:预览特性,允许在代码中方便地插入多行字符串,减少转义字符的使用。 在下载和安装Java JDK 11.0.8之后,开发者可以使用`javac`编译Java源代码,生成字节码(`.class`文件)。通过`...

    jdk-11.0.16.1-linux-x64-bin.tar

    标题中的"jdk-11.0.16.1-linux-x64-bin.tar"是一个针对Linux操作系统的64位Java Development Kit(JDK)的压缩文件,版本为11.0.16.1。这个文件是Oracle JDK的特定版本,用于在Linux环境下开发和运行Java应用程序。 ...

    redis-3.2.8.tar.gz和tcl8.6.1-src.tar.gz

    对于Redis的进一步学习,了解其数据类型(如字符串、哈希、列表、集合和有序集合)以及命令是非常重要的。例如,`SET`用于设置键值,`GET`用于获取键的值,`LPUSH/RPOP`用于操作列表,`HSET/HGET`处理哈希等。此外,...

    rlwrap-0.37.tar.gz

    总的来说,rlwrap提供了一种更高效、更易用的方式来与sqlplus交互,尤其是在处理字符编码问题时。对于需要频繁使用sqlplus的数据库管理员和开发者来说,rlwrap是一个非常实用的工具。通过正确配置和使用rlwrap,可以...

    arm-linux-gcc-4.4.3.tar.gz

    为了让系统知道新的交叉编译器的位置,需要在用户或系统的`~/.bashrc`或`/etc/bash.bashrc`文件中添加以下内容: ```bash export CC=/usr/local/arm-linux-gcc-4.4.3/bin/arm-linux-gcc export CXX=/usr/local/arm-...

    fonts-chinese-3.02-12.el5.noarch.rpm和fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm

    同时,对于需要处理中欧语言的环境,ISO 8859-2字体的提供则至关重要,因为它包含了那些区域的特殊字符,使得文本可以正确地被识别和打印。 总的来说,这两个rpm包提供了必要的字体资源,增强了CentOS系统对中文和...

    最新版linux jdk-11.0.8_linux-x64_bin.tar.gz

    4. **文本块(Text Blocks)**:新语法特性,用于处理多行字符串,减少转义字符的使用,提高代码可读性。 5. **改进的垃圾收集器**:包括ZGC(Z Garbage Collector)和Shenandoah,提供了更低的暂停时间,适合大...

    jdk-11.0.18-linux-aarch64-bin.tar.gz

    5. **文本块(Text Blocks)**:Java 11引入了文本块(多行字符串字面量)的预览特性,允许程序员方便地处理多行文本,减少字符串连接操作和转义字符的使用。 6. **其他语言特性和API增强**:包括对TLS协议的更新、...

    qt-embedded-linux-opensource-src-4.5.3.tar.gz 移植

    #### 环境准备与工具介绍 在进行 Qt 移植之前,需要准备以下工具和环境: 1. **ARM-Linux-GCC**:这是一个交叉编译器,用于编译目标平台为 ARM 架构的代码。文中提到的版本为 4.0.1。 2. **Qt X11**:这是用于桌面...

    最新版linux jdk-11.0.16.1_linux-x64_bin.tar.gz

    5. **改进的字符串处理**:如`isBlank()`, `strip()`, `stripIndent()`, 和 `stripTrailing()`方法。 6. **反应式流**:支持非阻塞I/O,适应现代并发编程。 此外,JDK 11还包含对HTTP客户端的内置支持,以及对TLS...

    最新版linux jdk-11.0.15.1_linux-x64_bin.tar.gz

    - **字符串切片**:提供`String#lines()`方法,方便处理文本文件。 - **ZGC**:一种低延迟的垃圾收集器,适用于大内存应用。 **2. JDK 11.0.15.1更新** JDK 11.0.15.1是一个小版本更新,主要修复了已知的漏洞和优化...

    jdk-11.0.16.1_linux-x64_bin.tar.gz

    4. **文本块(Text Blocks,JEP 378)**:为Java源代码引入了多行字符串文字,使得处理多行字符串变得更加简单。 5. **强类型字符串连接(JEP 359)**:增强了字符串连接操作的性能,使得在连接字符串时无需创建...

    thrift-0.9.1.exe和thrift-0.9.2.exe

    在这个例子中,我们定义了一个名为"MyService"的服务,它有一个方法"sayHello",接受一个字符串参数"name"并返回一个字符串。 然后,通过运行`thrift-0.9.x.exe`,我们可以指定`.thrift`文件和目标语言,如Java、...

Global site tag (gtag.js) - Google Analytics