当前位置: 首页 > Linux

Linux小技巧:使用expr命令获取子串和字符串长度

时间:2023-04-06 22:01:06 Linux

在Linux中,我们可以使用expr命令对字符串进行一些处理。例如:exprindexSTRINGCHARS获取指定字符在字符串中的位置exprsubstrSTRINGPOSLENGTH获取字符串中的子串exprlengthSTRING获取字符串的长度exprindexSTRINGCHARSindexSTRINGCHARS表达式见manexpr的说明如下:indexSTRINGCHARSindexinSTRINGwhereCHARSisfound,or0即exprindexSTRINGCHARS命令可以得到CHARS中包含的任意字符在STRING字符串中的第一个出现位置。位置偏移量从1开始计算,而不是0。如果未找到CHARS中包含的任何字符,则返回0。当STRING字符串内容包含空格时,必须用双引号括起来,否则会报错。注意:exprindexSTRINGCHARS命令并没有找到CHARS子串在STRING字符串中的位置。它只能找到单个字符在STRING字符串中的位置。只是CHARS可以指定查找哪些字符,以找到的第一个字符为准。具体例子如下:$value="Thisisateststring."$exprindex$valueaexpr:syntaxerror$exprindex"$value"a9$exprindex"$value"p0$exprindex"$value""test"4$exprindex"$value""est"4可以看到,由于value变量包含空格,$value不带双引号使用时,命令执行报错。使用"$value"加上双引号后,没有报错。exprindex"$value"命令返回一个字符在value变量中的位置value为9,位置偏移量从1开始。exprindex"$value"p返回0,因为p字符在value变量值中不存在。exprindex"$value""test"命令不返回value变量中"test"子串的位置。相反,它返回值变量值中三个字符t、e、s中任何一个第一次出现的位置。那么第一次出现的字符是s,"This"开头的子串,从1开始算,是第4个字符,所以返回4。由于是找多个字符中的任意一个,所以没有任何关系按照提供的字符顺序。所以exprindex"$value""est"命令也返回4。e字符没有被首先搜索,因为"est"参数的e字符在s字符之前。exprsubstrSTRINGPOSLENGTHsubstrSTRINGPOSLENGTH表达式说明见manexpr如下:substrSTRINGPOSLENGTHsubstringofSTRING,POS从1开始计数即exprsubstrSTRINGPOSLENGTH命令从STRING字符串的POS字符开始并继续获取LENGTH个字符以获取子字符串。位置偏移量是从1开始的,不是0。当STRING字符串内容包含空格时,必须用双引号括起来,否则会报错。具体例子如下:$value="Thisisateststring."$exprsubstr"$value"62is$exprsubstr"$value"114test可以看出,exprsubstr"$value"62commandsfrom值变量从值的第六个字符开始,获取直到并包括该字符的两个字符以获得“is”子字符串。exprsubstr"$value"114命令的结果类似。exprlengthSTRING关于lengthSTRING表达式的说明参见manbash如下:lengthSTRINGlengthofSTRING即exprlengthSTRING得到的是STRING字符串的长度。长度从1开始,当STRING字符串内容包含空格时,必须用双引号括起来,否则会报错。具体例子如下:$value="comeon"$exprlength"$value"7$exprlength$valueexpr:syntaxerror可以看到,value变量有空格。当$value没有用双引号引起来时,exprlength$value命令执行时会出错。