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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: 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开始,输出结果为:are
echo ${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空间数据处理实战/空间数据处理环境搭建.pdf
echo $f
# 第一件事情:提取文件名称,输出结果为:空间数据处理环境搭建.pdf
echo ${f##*/}
# 第二件事情:提取文件扩展名,输出结果为:pdf
echo ${f##*.}
# 第三件事情:提取父目录,输出结果为:/Users/tanzhenyu/Resources/Books/Python空间数据处理实战
echo ${f%/*}

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

# 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}可以是一个正则表达式.

例子:

# 把Windows的路径换成类UNIX的路径
f='C:\Windows\system32\cmd.exe'
echo ${$f//\///}
# 输出结果为:C:/Windows/system32/cmd.exe
目录
相关文章
|
26天前
|
弹性计算 Shell Perl
ecs服务器shell常用脚本练习(二)
【4月更文挑战第1天】shell代码训练(二)
106 1
|
29天前
|
Java Shell
SpringBoot启动脚本Shell
SpringBoot启动脚本Shell
18 0
|
6天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
1天前
|
弹性计算 运维 Shell
每天解析一个shell脚本(61)
【4月更文挑战第26天】shell脚本解析及训练(61)
12 3
|
1天前
|
弹性计算 运维 Shell
每天解析一个shell脚本(58)
【4月更文挑战第26天】shell脚本解析及训练(58)
67 0
|
1天前
|
弹性计算 Shell 数据安全/隐私保护
每天解析一个shell脚本(56)
【4月更文挑战第26天】shell脚本解析及训练(56)
13 0
|
3天前
|
监控 Shell 应用服务中间件
第十二章 Shell脚本编写及常见面试题(二)
第十二章 Shell脚本编写及常见面试题(二)
|
3天前
|
监控 关系型数据库 Shell
第十二章 Shell脚本编写及常见面试题(一)
第十二章 Shell脚本编写及常见面试题(一)
|
3天前
|
监控 Shell
生产环境Shell脚本Ping监控主机是否存活(多种方法)
生产环境Shell脚本Ping监控主机是否存活(多种方法)
|
3天前
|
运维 Shell
Shell脚本判断IP是否合法性(多种方法)
Shell脚本判断IP是否合法性(多种方法)