Linux 使用 shell 脚本处理字符串
推荐阅读
Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506
Helm3(K8S 资源对象管理工具)博客专栏:https://blog.csdn.net/xzk9381/category_10895812.html
本文原文链接:https://blog.csdn.net/xzk9381/article/details/110876329,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。
1. 截取字符串的前8位
expr substr "$string" 1 8
echo $string | awk '{print substr(,1,8)}'
echo $string | cut -c1-8
echo $string | dd bs=1 count=8 2>/dev/null
2. 分割、替换字符串
2.1 命令说明
符号 | 释义 |
---|---|
* | 通配符,用于匹配字符串将被删除的子串 |
. | 分割符,可以为任意一个或多个字符 |
% | 从右向左匹配 |
# | 从左向右匹配 |
/ | 表示替换 |
% # / | 非贪婪匹配,即匹配符合通配符的最短结果 |
% ## // | 贪婪匹配,即匹配符合通配符的最长结果 |
示例 | 含义 |
---|---|
${#VALUE} | 计算VALUE字符串的字符数量 |
${VALUE%.*} 或 ${VALUE%%.*} | 删除VALUE字符串中以分隔符"."匹配的右侧字符,保留左侧字符 |
${VALUE#*.} 或 ${VALUE##*.} | 删除VALUE字符串中以分隔符"."匹配的左侧字符,保留右侧字符 |
${VALUE/OLD/NEW} 或 ${VALUE//OLD/NEW} | 用NEW子串替换VALUE字符串中匹配的OLD子串 |
2.2 应用实例
定义变量name=odysee_odysee
- 计算VALUE字符串的字符数量
echo ${#name} # 输出结果 13
- 删除VALUE字符串中以分隔符"."匹配的右侧字符,保留左侧字符
# 非贪婪匹配
echo ${name%y*} # 输出结果 odysee_od
# 贪婪匹配
echo ${name%%y*} # 输出结果 od
- 删除VALUE字符串中以分隔符"."匹配的左侧字符,保留右侧字符
# 非贪婪匹配
echo ${name#*y} # 输出结果 see_odysee
# 贪婪匹配
echo ${name##*y} # 输出结果 see
- 用NEW子串替换VALUE字符串中匹配的OLD子串
# 非贪婪匹配
echo ${name/o/O} #输出结果 Odysee_odysee# 贪婪匹配
echo ${name//o/O} #输出结果 Odysee_Odysee
3. 字符串截取
3.1 命令说明
示例 | 含义 |
---|---|
${VALUE:POSITION} | 在字符串VALUE中,从位置POSITION开始提取子串(从左到右匹配) |
${VALUE:POSITION:LENGTH} | 在字符串VALUE中,从位置POSITION开始提取长度为LENGTH的子串(从左到右匹配) |
${VALUE:0-OFFSET} | 在字符串VALUE中,从右到左截取OFFSET个字符 |
${VALUE:0-OFFSET:LENGTH} | 在字符串VALUE中,从右到左截取OFFSET个字符的前LENGTH个 |
3.2 应用实例
定义变量name=mynameisodysee
- 在字符串name中,从位置2开始提取子串(从左到右匹配)
echo ${name:2} # 输出结果 nameisodysee
- 在字符串name中,从位置2开始提取长度为4的子串(从左到右匹配)
echo ${name:2:4} # 输出结果 name
- 在字符串name中,从右到左截取8个字符
echo ${name:0-8} # 输出结果 isodysee
- 在字符串name中,从右到左截取8个字符的前两个
echo ${name:0-8:2} # 输出结果 is
- 定义变量
string=abc12342341
,以下为截取示例
echo ${string:4} # 从第4位开始截取后面所有字符串,输出结果:2342341
echo ${string:3:3} # 从第3位开始截取后面3位,输出结果:123
echo ${string:3:6} #从第3位开始截取后面6位,输出结果:123423
echo ${string: -4} #截取后4位,输出结果:2341
echo ${string:(-4)} #同上
expr substr $string 3 3 #从第3位开始截取后面3位,输出结果123
- 定义变量
str="abcdef"
,以下为截取示例
expr substr "$str" 1 3 # 从第一个位置开始取3个字符,输出结果:abc
expr substr "$str" 2 5 # 从第二个位置开始取5个字符,输出结果:bcdef
expr substr "$str" 4 5 # 从第四个位置开始取5个字符,输出结果:def
echo ${str:2} # 从第二个位置开始提取字符串,输出结果:bcdef
echo ${str:2:3} # 从第二个位置开始提取3个字符,输出结果:bcd
echo ${str:(-6):5} # 从倒数第二个位置向左提取字符串,输出结果:abcde
echo ${str:(-4):3} # 从倒数第二个位置向左提取6个字符,输出结果:cde
4. 判断变量的值
4.1 命令说明
示例 | 含义 |
---|---|
${string-DEFAULT} | 如果string变量未定义,返回值为DEFAULT的值,否则返回变量的值 |
${string:-DEFAULT} | 如果string变量未定义,或者其值为空,返回值为DEFAULT的值,否则返回变量的值 |
${string=DEFAULT} | 如果string变量未定义,返回值为DEFAULT的值,并将DEFAULT赋值给string,否则返回变量的值 |
${string:=DEFAULT} |
如果string变量未定义,或者其值为空,返回值为DEFAULT的值, 并将DEFAULT赋值给string,否则返回变量的值 |
${string+DEFAULT} | 如果string已赋值,其值用DEFAULT替换,否则不进行任何替换 |
${string:+DEFAULT} | 如果string已赋值,其值用DEFAULT替换,否则不进行任何替换 |
${string?ERR_MSG} | 当变量未被定义时,将ERR_MSG消息发送到标准错误输出 |
${string:?ERR_MSG} | 当变量未被赋值时,将ERR_MSG消息发送到标准错误输出 |
本文原文链接:https://blog.csdn.net/xzk9381/article/details/110876329,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。
4.2 应用实例
- ${string-DEFAULT}:如果string变量未定义,返回值为DEFAULT的值,否则返回变量的值
# 未定义string变量
echo ${string-string 变量未定义} # 输出结果:string 变量未定义# 定义string变量,但值为空(会返回空值)
string=
echo ${string-string 变量未定义} # 输出结果为空# 定义string变量并赋值
string=test
echo ${string-string 变量未定义} # 输出结果:test
- ${string:-DEFAULT}:如果string变量未定义,或者其值为空,返回值为DEFAULT的值,否则返回变量的值
# 未定义string变量
echo ${string:-string 变量未定义} # 输出结果:string 变量未定义# 定义string变量,但值为空
string=
echo ${string:-string 变量值为空} # 输出结果:string 变量值为空# 定义string变量并赋值
string=test
echo ${string:-string 变量值为空} # 输出结果:test
- ${string=DEFAULT}:如果string变量未定义,返回值为DEFAULT的值,并将DEFAULT赋值给string,否则返回变量的值
# 未定义string变量
echo ${string=123} # 输出结果:123
echo ${string} # 输出结果:123# 定义string变量,但值为空(会返回空值)
string=
echo ${string=123} # 输出结果为空
echo ${string}# 定义string变量并赋值
string=test
echo ${string=123} # 输出结果:test
echo ${string} # 输出结果:test
- ${string:=DEFAULT}:如果string变量未定义,或者其值为空,返回值为DEFAULT的值,并将DEFAULT赋值给string,否则返回变量的值
# 未定义string变量
echo ${string:=123} # 输出结果:123
echo ${string} # 输出结果:123# 定义string变量,但值为空
string=
echo ${string:=123} # 输出结果:123
echo ${string} # 输出结果:123#定义string变量并赋值
string=test
echo ${string:=123} # 输出结果:test
echo ${string} # 输出结果:test
- ${string+DEFAULT}:如果string已赋值,其值用DEFAULT替换,否则不进行任何替换
# 未定义string变量
echo ${string+123} # 输出结果为空
echo ${string} # 输出结果为空# 定义string变量,但值为空
string=
echo ${string+123} # 输出结果:123
echo ${string} # 输出结果为空# 定义string变量并赋值
string=test
echo ${string+123} # 输出结果:123
echo ${string} # 输出结果:test
- ${string:+DEFAULT}:如果string已赋值,其值用DEFAULT替换,否则不进行任何替换
# 未定义string变量
echo ${string:+123} # 输出结果为空
echo ${string} # 输出结果为空# 定义string变量,但值为空
string=
echo ${string:+123} # 输出结果为空
echo ${string} # 输出结果为空# 定义string变量并赋值
string=test
echo ${string:+123} # 输出结果:123
echo ${string} # 输出结果:test
- ${string?ERR_MSG}:当变量未被定义时,将ERR_MSG消息发送到标准错误输出
# 未定义string变量
echo ${string?输出错误信息} # 输出结果:-bash: string: 输出错误信息
echo ${string} # 输出结果为空# 定义string变量,但值为空
string=
echo ${string?输出错误信息} # 输出结果为空
echo ${string} # 输出结果为空# 定义string变量并赋值
string=test
echo ${string?输出错误信息} # 输出结果:test
echo ${string} # 输出结果:test
- ${string:?ERR_MSG}:当变量未被赋值时,将ERR_MSG消息发送到标准错误输出
# 未定义string变量
echo ${string:?输出错误信息} # 输出结果:-bash: string: 输出错误信息
echo ${string} # 输出结果为空# 定义string变量,但值为空
string=
echo ${string:?输出错误信息} # 输出结果:-bash: string: 输出错误信息
echo ${string} # 输出结果为空# 定义string变量并赋值
string=test
echo ${string:?输出错误信息} # 输出结果:test
echo ${string} # 输出结果:test
5. 获取字符串长度
# 定义变量string=abc12342341
echo ${#string} # 输出结果 11
expr length $string # 输出结果 11
expr "$string" : ".*" # 分号二边要有空格,这里的:根match的用法差不多
6. 获取字符串所在位置
# 定义变量str="abc"
expr index $str "a" # 输出结果 1
expr index $str "b" # 输出结果 2
expr index $str "x" # 输出结果 0
expr index $str "" # 输出结果 0
7. 获取从字符串开头到子串的最大长度
# 定义变量string=abc12342341
expr match $string 'abc.*3' # 输出结果 9
8. 显示匹配的内容
# 定义变量string=abc12342341
expr match $string '\([a-c]*[0-9]*\)' # 输出结果 abc12342341
expr $string : '\([a-c]*[0-9]\)' # 输出结果 abc1
expr $string : '.*\([0-9][0-9][0-9]\)' # 输出结果 341 显示括号中匹配的内容
9. 显示不匹配的内容
# 定义变量string=abc12342341
echo ${string#a*3} # 从$string左边开始,去掉最短匹配子串,输出结果:42341
echo ${string#c*3} # 这样什么也没有匹配到,输出结果:abc12342341
echo ${string#*c1*3} # 从$string左边开始,去掉最短匹配子串,输出结果:42341
echo ${string##a*3} # 从$string左边开始,去掉最长匹配子串,输出结果:41
echo ${string%3*1} # 从$string右边开始,去掉最短匹配子串,输出结果:abc12342
echo ${string%%3*1} # 从$string右边开始,去掉最长匹配子串,输出结果:abc12# 定义变量str="abbc,def,ghi,abcjkl"
echo ${str#a*c} # 输出结果:def,ghi,abcjkl 一个井号(#) 表示从左边截取掉最短的匹配 (这里把abbc字串去掉)
echo ${str##a*c} # 输出结果:jkl 两个井号(##) 表示从左边截取掉最长的匹配 (这里把abbc,def,ghi,abc字串去掉)
echo ${str#"a*c"} # 输出结果:abbc,def,ghi,abcjkl 因为str中没有"a*c"子串
echo ${str##"a*c"} # 输出结果:abbc,def,ghi,abcjkl 同理
echo ${str#*a*c*} # 输出结果:空
echo ${str##*a*c*} # 输出结果:空
echo ${str#d*f} # 输出结果:abbc,def,ghi,abcjkl,
echo ${str#*d*f} # 输出结果:ghi,abcjkl
echo ${str%a*l} # 输出结果:abbc,def,ghi 一个百分号(%)表示从右边截取最短的匹配
echo ${str%%b*l} # 输出结果:a 两个百分号表示(%%)表示从右边截取最长的匹配
echo ${str%a*c} # 输出结果:abbc,def,ghi,abcjkl# 这里要注意,必须从字符串的第一个字符开始,或者从最后一个开始,可以这样记忆, 井号(#)通常用于表示一个数字,它是放在前面的;百分号(%)卸载数字的后面; 或者这样记忆,在键盘布局中,井号(#)总是位于百分号(%)的左边(即前面)
10. 去掉字符串末尾的字符
使用df -Th获取磁盘信息,并将使用率赋给变量来与阈值进行对比,如果存在%号无法进行对比,所以需要去掉变量中的%号,可以使用${var%?}的格式来去掉最后一个字符
#!/bin/bashroot_usage=$(df -TPh | grep -w "/" | awk '{print $6}')
echo ${root_usage%?}
本文原文链接:https://blog.csdn.net/xzk9381/article/details/110876329,转载请注明出处。如有发现文章中的任何问题,欢迎评论区留言。
Linux 使用 shell 脚本处理字符串相关推荐
- linux 正则截取字符串,Linux的Shell脚本——day4——字符串截取、正则
零散知识点 ftp操作: ftp 服务器IP 连接ftp,可以进行交互操作 注意搭建ftp服务是vsftpd,要区别 特殊的一个常用 ${#变量} 统计变量的长度位数 脚本中对一个文件进行撰写 c ...
- Linux的shell脚本函数教程
Linux的shell脚本函数教程 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.shell中函数使用示例 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.she ...
- linux du -sh 脚本,Linux之shell脚本(2)
Linux之shell脚本(2) 一.printf命令: printf是一个把从标准输入的字符按照你所要求的格式输出到标准输出即屏幕的命令.在很多时候,我们可能需要将自己的数据给他格式化输出的. 1. ...
- Linux之shell脚本(2)
Linux之shell脚本(2) 一.printf命令: printf是一个把从标准输入的字符按照你所要求的格式输出到标准输出即屏幕的命令. 在很多时候,我们可能需要将自己的数据给他格式化输出的. 1 ...
- (38)Shell脚本【字符串运算:相等判断】
(38)Shell脚本[字符串运算:相等判断] 1 目录 1.1 Shell脚本简介 1.2 Shell脚本文件 1.3 Shell脚本作用 1.4 Shell运行环境 1.5 Shell脚本[字符串 ...
- Linux系统shell脚本、python脚本编写
GPU排队脚本 python脚本 GPU排队脚本 ---- GPU一旦空闲触发脚本执行程序 参考: GPU排队脚本(python脚本) cmd = 'bash run.sh' 该句设置要执行的pyth ...
- Linux系统Shell脚本中的echo命令
Linux系统Shell脚本中的echo命令 echo的作用 输出字符串 格式 echo "字符串内容" 一,显示转义字符 转义字符 ...
- linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...
今天为大家带来的内容是:(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤 本文内容主要介绍了Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤,文章 ...
- Linux环境Shell脚本上传下载阿里云OSS文件
为什么80%的码农都做不了架构师?>>> Linux环境Shell脚本上传下载阿里云OSS文件 背景 工作中由于我们项目生成的日志文件比较重要,而本地磁盘空间有限存储不了多久, ...
最新文章
- java ADT生成带签名的apk
- java+jtextfield+取值_[求助]JTextfield 取值问题!
- JBoss模块很烂,无法在JBoss 7下使用自定义Resteasy / JAX-RS
- java 查看虚拟机状态_深入理解java虚拟机学习笔记(四)虚拟机性能监控与故障处理工具...
- SpringMCV整合配置文件
- 如何选择商业智能BI工具
- Ubuntu报错:E: The repository http://ppa.launchpad.net/fcitx-team does not have a Release file.
- 第十章 嵌入式linux的调试技术
- vs2015无法编辑html,连发Lianfa娱乐app -连发Lianfa娱乐appV6.2.84
- 蒲公英快速查询苹果手机UDID方法
- 编程灵异事件簿(一)
- 双线性插值实现图像放大算法 matlab,FPGA/verilog实现双线性插值图像放大
- RF天线设计的一些概念
- linux centos用smartctl 打开硬盘写缓存
- JEP 378 Text blocks private interface methods
- vSphere高级功能(一)——VMotion及SVMotion的实现
- phpMyAdmin 常见漏洞利用记录
- BASE64编码的图片在网页中直接用
- Matlab中feedback函数的用法
- ddmmyy日期格式是多少_英语中关于年月日以及数字
热门文章
- HDU1642 UVA167 UVALive5227 The Sultan's Successors题解
- CCF201609-1 最大波动(100分)
- Spark standalone 模式下的集群部署
- zipfile中怎么关闭流_深入学习JAVA -IO流详解
- python没基础能自学吗-需要自学python吗?大概多久能学会?
- python代码翻译器-Python编程学习 -- 用十几行代码实现一个翻译器
- 学了python能干啥举例-学了Python可以做哪些有趣的东西
- 为何python不好找工作-郑州为何python不好找工作?
- 简单python脚本实例-python常用运维脚本实例
- 有人用语音识别写作吗,如果没有,为什么?