shell字符串处理
一、字符串切片:
${#var}:返回字符串变量var的长度
${var:offset}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0到 ${#var}-1 之间(bash4.2后,允许为负值)
${var:offset:number}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
${var: -length}:取字符串的最右侧几个字符,注意:冒号后必须有一空白字符
${var:offset:-length}:从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容
${var: -length:-offset}:先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容,注意:-length前空格,同样的表达形式,offset的表现行为和数组的是反着的。
字符串切片实例:
- a='abcdefghijklmn'
- echo ${#a} #输出字符串a的总长度
- 14
- echo ${a:4} #输出字符串a从0开始数,包含第4个元素之后的所有元素
- efghijklmn
- echo ${a:4:3} #输出字符串a从0开始数,包含第4个元素之后的3个元素
- efg
- echo ${a: -4} #从字符串a的右侧向左取4个元素,冒号后必须有一个空字符
- klmn
- echo ${a:5:-2} #输出字符串a从0开始数,包含第5个元素的向右数的i倒数3个元素,注意这种用法依赖bash版本,尽量别用。
- fghijkl
- echo ${a: -5:-2} #从字符串a的右侧向左数5个,再向右取到倒数3个字符,注意这种用法依赖bash版本,尽量别用。
- jkl
- echo ${a: -5:2} #从字符串a的右侧向左数5个,再向右取2个字符
- jk
二、基于模式取子串
${var#*word}:其中word可以是指定的任意字符功能:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符之间的所有字符
${var##*word}:同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容
${var%word*}:其中word可以是指定的任意字符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符之间的所有字符;
${var%%word*}:同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符;
字符处理实例:
- a='abcdefg_a_fghijklmn'
- echo ${a#*fg} #从左边开始删,删除起始位置到第一个fg为止,包括fg
- _a_fghijklmn
- echo ${a##*fg} #贪婪模式,左边开始删,删除起始位置到最后一个fg为止,包括fg
- hijklmn
- echo ${a%fg*} #从右边开始删,删除终点位置到第一个fg为止,包括fg
- abcdefg_a_
- echo ${a%%fg*} #贪婪模式,从右边开始删,删除重点位置到最后一个fg为止,包括fg
- abcde
三、字符串的查找替换
${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之
${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
查找替换实例:
- a='abcdefg_a_fghijklmn'
- echo ${a/fg/dd} #替换从左边数第一个fg为dd
- abcdedd_a_fghijklmn
- echo ${a//fg/dd} #替换字符串中所有的fg为dd
- abcdedd_a_ddhijklmn
- echo ${a/#ab/dd} #如果开头是ab则替换成dd
- ddcdefg_a_fghijklmn
- echo ${a/#fd/dd} #如果开头是fd则替换成dd
- abcdefg_a_fghijklmn #开头不是fd不做替换
- echo ${a/%mn/dd} #结尾是mn则替换成dd
- abcdefg_a_fghijkldd
- echo ${a/%fd/dd} #如果结尾是fd则替换成dd
- abcdefg_a_fghijklmn #结尾并不是fd不做替换
四、查找并删除字符串
和查找替换类似,只不过没有替换值
${var/pattern}:删除var所表示的字符串中第一次被pattern所匹配到的字符串
${var//pattern}:删除var所表示的字符串中所有被pattern所匹配到的字符串
${var/#pattern}:删除var所表示的字符串中所有以pattern为行首所匹配到的字符串
${var/%pattern}:删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串
和查找替换语法一样,只不过没有替换值和斜线,这里就不做演示了。
五、符大小写转换
${var^^}:把var中的所有小写字母转换为大写
${var,,}:把var中的所有大写字母转换为小写
总结:使用shell内部的字符串处理功能能提高很多的工作效率,以及节省部分机器性能,但是需要注意的一点,字符串处理变量的值并不会改变变量的数据,只是输出的时候进行了变更。
六、字符串变量赋值

使用字符串的变量赋值,可以代替部分的if else让语法更简洁。
shell字符串处理的更多相关文章
- linux shell 字符串操作(长度,查找,替换)详解
linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...
- Shell 字符串比较
转自网络 Shell字符串比较 收藏 Shell 中整数比较方法及字符串的比较方法,如等于,不等于,大于,大于等于,小于,等等. 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. --- ...
- shell字符串操作详解
shell字符串操作详解的相关资料. 1.shell变量声明的判断 表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...
- 【转】shell字符串截取
shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...
- shell字符串的用法
shell字符串的用法 注意:shell4.2和shell4.1会有差别,较低版本的shell可能不支持某些功能 获取字符串长度:${#string} 获取子串: 注:(左边的第一个字符是用 0 表示 ...
- Linux脚本shell字符串处理
Linux脚本shell字符串处理,基本都有了,看着搜吧 TLDP教堂 shell中if条件字符串.数字比对,[[ ]]和[ ]区别 Linux 之 shell 比较运算符 Linux Shell编程 ...
- 【Linux】shell字符串分割、数组访问、条件判断
参考资料: shell字符串分割再循环:http://www.shangxueba.com/jingyan/1633455.html linux shell中 if else以及大于.小于.等于逻辑表 ...
- shell 字符串中定位字符位置 获取字符位置
linux shell 字符串操作(长度,查找,替换)详解 该博文中描述的如下两个字符串操作, ${string:position} #在$string中, 从位置$position开始提取子串 ${ ...
- Shell字符串操作
@1:子串削除 ${string#substring} 从$string 的开头位置截掉最短匹配的$substring. ${string##substring} 从$string 的开头位置截掉最长 ...
- Linux Shell系列教程之(五)Shell字符串
本文是Linux Shell系列教程的第(五)篇,更多shell教程请看:Linux Shell系列教程 字符串是Shell编程中最常用最有用的数据类型,今天,Linux大学网就为大家介绍一下在She ...
随机推荐
- 日期控件传到后台异常。日期数据格式是 Date 还是 String?
问题:日期控件的时间,传到Controller层直接异常. 前台日期格式:YYYY/MM/DD,后台Java定义的时间类型:Date. 解决: 方法一:原因是Controller层的参数类型定义为 D ...
- [TCP/IP] 滑动窗口
什么是滑动窗口? 滑动窗口机制是TCP协议的一种流量控制和防拥塞的机制. 滑动窗口的工作原理? 简单来讲,就是接收方和发送方分别保留一块缓冲区,作为接收和发送数据来使用,发送数据过程中,如果发送方发的 ...
- 一个基于Unix套接字的注册登录系统
2016/5/5 今天,我参考<Unix网络编程-卷1>第5章的TCP回射客户/服务器程序写了一个简单的注册登录系统,其功能如下:(1)注册.客户端向服务器发送个人信息请求注册,服务器查询 ...
- 【转帖】sysbench压力测试工具简介
sysbench压力测试工具简介 https://www.cnblogs.com/pdlife/p/6698957.html 一.sysbench压力测试工具简介: sysbench是一个开源的.模块 ...
- 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)
--喜欢记得关注我哟[shoshana]-- 目录 1.朴素的模式匹配算法2.KMP模式匹配算法 2.1 KMP模式匹配算法的主体思路 2.2 next[]的定义与求解 2.3 KMP完整代码 2.4 ...
- (三)mybatis 的使用(入门)
目录 mybatis 的使用 -- 准备 mybatis 的使用 -- 搭建好工程结构 mybatis 的使用 -- 创建 sqlMapCnfig.xml 全局配置文件 mybatis 的使用 -- ...
- Android Studio中怎么使用DDMS工具
随着android studio的广泛使用,开发人员对相关工具的使用需求更加凸显.昨天在一个android studio教程网站上,看到一篇有关DDMS工具使用的相关知识,感觉很不错,分享给大家,一起 ...
- pycharm 关联 maya
设置pycharm代码自动补全 + pycharm关联maya 一.pycharm 设置 python环境,设置代码自动补全 1.devkit 选择对应版本进行下载https://www.autode ...
- System.Data.EntityException: The underlying provider failed on Open.
场景:IIS默认站点建立程序,使用Windows集成身份验证方式,连接SQLServer数据库也是采用集成身份验证.我报“System.Data.EntityException: The underl ...
- ScrumBasic开发记录
ScrumBasic 是基于asp.net core 1.0的开源敏捷管理软件.目前第一版.目前只有很基础的东西.希望我能将这个项目演变下去. 地址:https://github.com/CAH-Fl ...