前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell脚本中字符串的一些常用操作

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

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 09:42:16
1.2K0
发布2019-01-22 09:42:16
举报

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

字符串长度

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

例子:

代码语言:javascript
复制
string='How are you'
echo ${#string}  # 输出结果为11

字符串取子串

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

例子:

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

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

符号

含义解析

${string#substring}

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

${string##substring}

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

${string%substring}

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

${string%%substring}

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

我们可以总结一下规律:

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

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

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

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

代码语言:javascript
复制
# basename提取当前文件或者当前目录名称,输出结果为:空间数据处理环境搭建.pdf
echo $(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}可以是一个正则表达式.

例子:

代码语言:javascript
复制
# 把Windows的路径换成类UNIX的路径
f='C:\Windows\system32\cmd.exe'
echo ${$f//\///}
# 输出结果为:C:/Windows/system32/cmd.exe
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年05月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Shell脚本中字符串的一些常用操作
    • 字符串长度
      • 字符串取子串
        • 字符串截取(不匹配字符)
          • 子串替换
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档