linux expr字符串,linux expr 命令

linux expr 命令

expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。

它还具有几个特殊功能,判断变量或参数是否为整数、是否为空、是否为0等。

expr 语法

expr 表达式

expr 用法目录

expr length 计算字串长度

该表达式是返回字符串 string的长度,其中string不允许为空,否则将报错,所以可以用来判断变量是否为空。

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr length "xinbiancheng.cn"

15

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr length abcde

5

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr length 123

3

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr length $xxx

expr: syntax error #expr 报错 因为没有$xxx 所以为null 空

[root@iz8vbbxoyfcgyzkxcspg04z test]# if [ $? -ne 0 ];then echo '$xxx is null';fi

$xxx is null #在执行expr 之前需要判断是否为空

expr 四则运算

注意:

expr 命令只能用于整数值计算

expr 运算符左右都有空格,如果没有空格表示是字符串连接

expr 使用乘号时,必须用反斜线屏蔽其特定含义。因为expr 支持正则表达式,而正则表达式*星号是有特殊含义的,所以需要进行转义

expr 不用整数进行计算报错为:expr: non-integer argument

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 1.2 + 1.3

expr: non-integer argument

expr 没有空格表示是字符串连接

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 1+2

1+2

expr 正确写法中间加空格

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 1 + 2

3

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 6 / 3 #expr 整除

2

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 6 % 3 #expr 取余

0

expr *乘号 不用  \ 反斜线 或 引号 ' 包裹会报错 expr: syntax error

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 2 * 2

expr: syntax error

expr *乘号 正确写法,有两种如下所示:

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 2 \* 2

4

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 2 "*" 2

4

expr 比较操作

比较操作符< <= = == != >= > 其中""是正则表达式的元字符,且"

这些操作符会首先会将两端的参数转换为数值,如果转换成功,则采用数值比较,如果转换失败,则按照字符集的排序规则进行字符大小比较。

比较的结果若为true,则expr返回1,否则返回0。

[root@iz8vbbxoyfcgyzkxcspg04z test]# a=6

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr $a = 2

0

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr $a = 6

1

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr $a \* 3 = 18

1

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abc \> ab

1

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abc \> abcd

0

expr 逻辑运算

逻辑连接符号"&"和"|",这两个符号都需要转义,或使用引号包围

"&"表示如果两个参数都非0,则返回第一个参数,否则返回0。但任意一个参数为空,则expr报错。除非空字符串使用引号包围,则处理方法和0一样。

"|"表示如果第一个参数非0,则返回第一个参数的值,否则返回第二个参数。但如果任意一个参数为空,则expr报错。除非空字符串使用引号包围,则处理方法和0一样。

expr | 或 操作

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr $b '|' 1 #$b变量没有任何赋值,所以为空,则expr报错

expr: syntax error

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr "$b" '|' 1 #空字符串使用引号包围 expr不会报错 当0处理

1

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abc '|' 0 #expr 第一个参数不为空,返回第一个

abc

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 0 '|' abc #expr 第二个参数不为空,返回第二个

abc

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abc '|' cde #expr 第一个参数不为空,返回第一个

abc

expr & 与 操作

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr $b '&' 1 #$b变量没有任何赋值,所以为空,则expr报错

expr: syntax error

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr "$b" '&' 1 #空字符串使用引号包围 expr不会报错 当0处理

0

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 0 '&' abc

0

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abc '&' 0

0

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abc '&' cde #两个参数都是非0,返回第一个参数

abc

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr cde '&' abc #两个参数都是非0,返回第一个参数

cde

expr substr 截取字符串

用法:

expr substr string pos len

该表达式是从string字符串中取出从pos位置开始长度为len的子字符串。如果pos或len为非正整数时,将返回空字符串。

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr substr abcde 2 3

bcd

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr substr abcde 2 4

bcde

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr substr abcde 2 5

bcde

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr substr abcde 2 0 #非正整数返回空字符串

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr substr abcde 2 -1 #非正整数返回空字符串

expr index 返回找到最靠前的字符的位置

用法:

expr  index string chars

该表达式是从chars中每一个字符在string字符串中搜索它的位置,找string中最靠前位置。

实例代码:

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index abcde dec

3

expr 命令将对字符串"dec"逐字符分解,首先分解得到第一个字符d,从abcde中搜索到d的位置为4,再分解得到第二个字符e,该字符在abcde中的位置为5,最后得到的字符是c,该字符在abcde中的位置为3。其中3是最靠前的位置,所以命令返回的结果为3。

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index 'abcde' c

3

如果chars中的所有字符都不存在于string中,则返回0。

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index abcde 1

0

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index abcde f

0

expr + token 特殊字符的用法

expr中有些符号和关键字有特殊意义,如"match"、"index"、"length",如果要让其成为字符,使用该表达式将任意token强制解析为普通字符串。

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index match m

expr: syntax error

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index index i

expr: syntax error

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index length e

expr: syntax error

正确用法 在 关键字 前面空格再加一个+加号连接

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index + match m

1

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index + index i

1

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr index + length e

2

expr 正则表达式的用法

如果没有学习正则表达式,有可能不容易看懂,请点击链接学习。

用法:

expr string : REGEX

string代表字符串,REGEX代表正则表达式,如果要输出匹配到的字符串结果,需要使用"\("和"\)",否则返回的将是匹配到的字符串数量。

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abcde : 'ab\(.*\)'

cde

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abcde : 'ab\(.\)'

c

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abcde : 'ab.*'

5

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abcde : 'ab.'

3

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abcde : '.*cd*'

4

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr 手机号码是12345678911对吗? : '手机号码是\([0-9]*\)'

12345678911

注意,由于REGEX中隐含了"^",所以使得匹配时都是从string首字符开始的。

[root@iz8vbbxoyfcgyzkxcspg04z test]# expr abcde : 'cd.*'

0

之所以为0,是因为真正的正则表达式是"^cd.*",而abcde不是c开头而是a开头的,所以无法匹配到任何结果。

因此,任何字符串匹配时,都应该从首字符开始。字符串匹配时,会先将两端参数转换为字符格式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值