shell 进阶之匹配字符串
一,操作字符串
1,字符串长度
expr 命令取字符串函数
自带shell函数读取
2,匹配字符串开头字串的长度
!!!!!!!!!!!!$substring是正则表达式.!!!!!!!!!
expr 格式 expr match "$string" '$substring'
expr "$string" : '$substring'
3,索引
格式
expr index $string $substring
求出第一次出现的位置
4,提取子串
1)格式:${string:position}
第五个字符开始取道最后
2)格式:${string:position:length}
从第五个字符开始取并且只取5个
反着取
上面的情况都不可以的,所以反着取只能这样取
3)格式 expr substr $string $position $length
从某个位置取多长
4)expr match "$string" '\($substring\)' expr "$string" : '\($substring\)'
从什么地方取什么东西
5)expr match "$string" '.*\($substring\)'
从结尾提取匹配的正则字符
5,字符串消除
1)${string#substring}
最短匹配的字符清除
2)${string##substring}
最长的字符消除
3)${string%substring}
结尾的位置截取最短匹配的字符
4)${string%%substring}
从结尾位置截取最长的字符,贪婪匹配
6,字符转替换
1)${string/substring/replacement}
惰性匹配只匹配一次内容并且替换
2)${string//substring/replacement}
全局匹配全部替换
3)${string/#substring/replacement}
如果开头匹配到了的话就只在开头替换
4)${string/%substring/replacement}
如果结尾匹配到了的话就只在结尾替换
5)${!varprefix*}
6)${!varprefix@}
7, 参数替换
1)${parameter-default}
如果变量parameter没被声明, 那么就使用默认值
2)${parameter:-default}
如果变量parameter没被设置, 那么就使用默认值
这两个的区别是什么呢
welcom 并没有被声明,就是没有在命令行或者执行赋值操作
这样的话welcom被声明了但是没有设置值
所以前一个读取的是他的空值,应为已经声明了
后一个声明完了没有设置他的值所以应用whoami的变量
3) ${parameter=default}
如果变量parameter没声明, 那么就把它的值设为default.
这个看起来一样但是仔细想想上一个是应用他的值这个是设置为这个值
同样也有
${parameter:=default} -- 如果变量parameter没设置, 那么就把它的值设为default.
4)${parameter+alt_value}, ${parameter:+alt_value}
-
${parameter:+alt_value} -- 如果变量parameter被设置了, 那么就使用alt_value, 否则就使用null字符串.
${parameter+alt_value} -- 如果变量parameter被声明了, 那么就使用alt_value, 否则就使用null字符串.
如果设置了值的话就用后面的值,没有设置就用空值
5)${parameter?err_msg}, ${parameter:?err_msg}
${parameter?err_msg} -- 如果parameter已经被声明, 那么就使用设置的值, 否则打印err_msg错误消息.
${parameter:?err_msg} -- 如果parameter已经被设置, 那么就使用设置的值, 否则打印err_msg错误消息.
最新文章
- SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具 DB2DB v1.0
- 重新编译安装gcc-4.1.2(gcc版本降级)之TFS安装
- 高性能WEB开发之Web性能测试工具推荐
- FindBugs的Bug类型及分析
- js中两个感叹号的原理与用法分析(转载记录没找到原帖)
- MUI上传图片之选择相册和相机上传
- Alpha冲刺(1/10)——2019.4.23
- c#使用dynamic关键字传输数据的用法
- 牛客网练习赛t2(线段树)
- 性能测试day02_预习知识
- ZH奶酪:CSS中限制span显示字数
- C# 日志系统 log4net 配置及使用
- 转:Too many systemd: Created slice !
- Mininet 系列实验(五)
- web开发视频(一)之环境准备
- JDK自带工具keytool生成ssl证书 和 HTTPS双向认证
- 【docker】解决docker pull镜像 拉取镜像龟速的问题,docker拉取镜像使用阿里云docker镜像加速器
- spring深入了解心得
- 资源:template
- Light oj 1134 - Be Efficient (前缀和)