Shell脚本中字符串的一些常用操作

网友投稿 668 2022-10-11

Shell脚本中字符串的一些常用操作

Shell脚本中字符串的一些常用操作

字符串长度

​​${#string}​​可以获得${string}的长度

例子:

string='How are you'echo ${#string} # 输出结果为11

字符串取子串

​​${string:position:length}​​ 在${string}中, 从位置${position}开始提取长度为${length}的子串

例子:

string='How are you'echo ${string:4:3} # 索引从0开始,输出结果为:areecho ${string:4} # 省略长度,默认提取至最末尾,输出结果为:are you

字符串截取(不匹配字符)

符号

含义解析

​${string#substring}​

从变量${string}的开头, 删除最短匹配${substring}的子串

​${string##substring}​

从变量${string}的开头, 删除最长匹配${substring}的子串

​${string%substring}​

从变量${string}的结尾, 删除最短匹配${substring}的子串

​${string%%substring}​

从变量${string}的结尾, 删除最长匹配${substring}的子串

我们可以总结一下规律:

换句话来说,#总是表示左边算起,%总是表示右边算起;一个符号表示最短匹配,两个符号表示最长匹配。

我们可以利用该特点做一些有意义的事情,下面举几个例子:

# 定义字符串f=$(realpath 空间数据处理环境搭建.pdf)# 输出该字符串变量的值,结果为/Users/tanzhenyu/Resources/Books/Python空间数据处理实战/空间数据处理环境搭建.pdfecho $f# 第一件事情:提取文件名称,输出结果为:空间数据处理环境搭建.pdfecho ${f##*/}# 第二件事情:提取文件扩展名,输出结果为:pdfecho ${f##*.}# 第三件事情:提取父目录,输出结果为:/Users/tanzhenyu/Resources/Books/Python空间数据处理实战echo ${f%/*}

当然,Shell编程中我们也可以使用​​basename​​​和​​dirname​​两个命令分别提取文件名和父目录名称:

# basename提取当前文件或者当前目录名称,输出结果为:空间数据处理环境搭建.pdfecho $(basename $f)# dirname提取父目录名称,输出结果为:/Users/tanzhenyu/Resources/Books/Python空间数据处理实战echo $(dirname $f)

子串替换

符号

含义解析

​${string/substring/replacement}​

使用${replacement}, 来代替第一个匹配的$substring

​${string//substring/replacement}​

使用${replacement}, 代替所有匹配的$substring

​${string/#substring/replacement}​

如果${string}的前缀匹配${substring}, 那么就用${replacement}来代替匹配到的${substring}

​${string/%substring/replacement}​

如果${string}的后缀匹配${substring}, 那么就用${replacement}来代替匹配到的${substring}

注:​​${substring}​​可以是一个正则表达式.

例子:

# 把Windows的路径换成类UNIX的路径f='C:\Windows\system32\cmd.exe'echo ${$f//\///}# 输出结果为:C:/Windows/system32/cmd.exe

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:周刊、图书推荐小程序,由wxml,wxss,js 原生开发(微信小程序图书)
下一篇:Java并发编程回环屏障CyclicBarrier
相关文章

 发表评论

暂时没有评论,来抢沙发吧~