Linux扩展篇-shell编程(八)-shell字符串截取
shell字符串截取,一般包含从指定位置和从指定字符截取。
一、从指定位置截取
1) 从字符串左边开始计数
格式:
${string: start :length}
从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: start}
从 string 字符串的左边第 start 个字符开始截取,直到最后。
示例:
[root@abc-1 ~]# url="https://www.baidu.com/"
[root@abc-1 ~]# echo ${url: 12: 5}
baidu
[root@abc-1 ~]# echo ${url: 12}
baidu.com/
2) 从字符串右边开始计数
格式:
${string: 0-start :length}
从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
${string: 0-start}
从 string 字符串的右边第 start 个字符开始截取,直到最后。
示例:
[root@abc-1 ~]# url="https://www.baidu.com/"
[root@abc-1 ~]# echo ${url: 0-10: 5}
baidu
[root@abc-1 ~]# echo ${url: 0-10}
baidu.com/
从右边数,b是第10个字符,向右截取长度5。
二、从指定字符截取
1) 使用 # 号截取右边字符
格式:
${string#*chars}
从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string##*chars}
从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
示例:
[root@abc-1 ~]# url="https://www.baidu.com"
[root@abc-1 ~]# echo ${url#*:}
//www.baidu.com
[root@abc-1 ~]# echo ${url#*/} # 第一次出现'/'
/www.baidu.com
[root@abc-1 ~]# echo ${url##*/} # 最后一次出现'/'
www.baidu.com
2) 使用 % 号截取左边字符
格式:
${string%*chars}
从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
${string%%*chars}
从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
示例:
[root@abc-1 ~]# url="https://www.baidu.com/"
[root@abc-1 ~]# echo ${url: 0-10: 5}
baidu
[root@abc-1 ~]# echo ${url: 0-10}
baidu.com/
总结
最后,我们对以上的8种格式做个总结,如下表所示:
| 格式 | 说明 |
|---|---|
| ${string: start :length} | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
| ${string: start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
| ${string: 0-start :length} | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。 |
| ${string: 0-start} | 从 string 字符串的右边第 start 个字符开始截取,直到最后。 |
| ${string#*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
| ${string##*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
| ${string%*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
| ${string%%*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
实践:
(1)从以前的配置文件中获取数据库的相关信息,包含数据库ip、端口port、数据库类型type、数据库名称name,
[root@abc-1 ~]# url_port_db="spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/test?useUnicode=true&characterEncoding=UTF-8&sessionVariables=time_zone='+8:00'"
[root@abc-1 ~]# sql_type_other=$(echo ${url_port_db#*:})
[root@abc-1 ~]# echo ${sql_type_other}
postgresql://127.0.0.1:5432/test?useUnicode=true&characterEncoding=UTF-8&sessionVariables=time_zone='+8:00'
[root@abc-1 ~]# sql_type=$(echo ${sql_type_other%%:*})
[root@abc-1 ~]# echo ${sql_type}
postgresql
[root@abc-1 ~]# url_port_db=$(echo ${url_port_db#*=})
[root@abc-1 ~]# echo ${url_port_db}
jdbc:postgresql://127.0.0.1:5432/test?useUnicode=true&characterEncoding=UTF-8&sessionVariables=time_zone='+8:00'
[root@abc-1 ~]# url_port_db=$(echo ${url_port_db#*//})
[root@abc-1 ~]# echo ${url_port_db}
127.0.0.1:5432/test?useUnicode=true&characterEncoding=UTF-8&sessionVariables=time_zone='+8:00'
[root@abc-1 ~]# url_port_db=$(echo ${url_port_db%\?*})
[root@abc-1 ~]# echo ${url_port_db}
127.0.0.1:5432/test
[root@abc-1 ~]# url_port=$(echo ${url_port_db%/*})
[root@abc-1 ~]# echo ${url_port}
127.0.0.1:5432
[root@abc-1 ~]# sql_db=$(echo ${url_port_db#*/})
[root@abc-1 ~]# echo ${sql_db}
test
[root@abc-1 ~]# sql_ip=$(echo ${url_port_db%:*})
[root@abc-1 ~]# echo ${sql_ip}
127.0.0.1
[root@abc-1 ~]# sql_port=$(echo ${url_port#*:})
[root@abc-1 ~]# echo ${sql_port}
5432
参考:
http://c.biancheng.net/view/1120.html
Linux扩展篇-shell编程(八)-shell字符串截取的更多相关文章
- Linux入门篇(六)——Shell(二)
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...
- 【Shell编程】Shell程序设计
1.Shell简介 作为Linux灵感来源的Unix系统最初是没有图形化界面的,所有的任务都是通过命令行来实现的.因此,Unix的命令行系统得到了很大的发展,逐步成为一个功能强大的系统. Sh ...
- Linux入门篇(五)——Shell(一)
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...
- Linux shell编程02 shell程序的执行 及文件权限
第一个shell脚本 1. shell编程的方式 交互式shell编程 非交互式shell编程:执行的语句存放到一个文件 shell脚本:可以任意文件名,建议扩展名为sh 2. ...
- shell编程01—shell基础
01.学习shell编程需要的知识储备 1.vi.vim编辑器的命令,vimrc设置 2.命令基础,100多个命令 3.基础.高端的网络服务,nfs,rsync,inotify,lanmp,sersy ...
- Shell基础(四):字符串截取及切割、字符串初值的处理、基使用Shell数组、expect预期交互、使用正则表达式
一.字符串截取及切割 目标: 使用Shell完成各种Linux运维任务时,一旦涉及到判断.条件测试等相关操作时,往往需要对相关的命令输出进行过滤,提取出符合要求的字符串. 本案例要求熟悉字符串的常见处 ...
- Shell脚本8种字符串截取方法总结
Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 代码如下: echo ${va ...
- Linux shell编程 4 ---- shell中的循环
1 for循环 1 for语句的结构 for variable in values; do statement done 2 for循环通常是用来处理一组值,这组值可以是任意的字符串的集合 3 for ...
- shell编程—注释、字符串和数组(四)
shell注释 以#作为注释符号 shell中没有多行注释,只能一行加一个#号 字符串操作 1.拼接字符串 2.获取字符串长度 string=“khjf” echo ${#string} 3.提取子字 ...
- Linux基础篇二:Bash shell(壳,命令解释器)介绍
shell执行方式: 第一:输入命令 (简单工作) 第二: 脚本 (适合大量工作) Bash shell 实际上的叫法是 GNU/Bash 如何查询呢: bash - version ...
随机推荐
- Oracle 存储包死锁杀进程操作
Oracle 存储包死锁杀进程操作 突然想起来,正好记一份 首先查询锁包的情况 select distinct session_id from dba_ddl_locks where name=upp ...
- App隐私合规“免费”自动化检测
简介: App隐私合规检测提供了全面的隐私合规检测报告和专家建议,从确保形式合规(隐私政策文本合规性)及实质合规(代码层合规性)的一致性,从个人信息收集.权限使用场景.超范围采集.隐私政策.三方SDK ...
- 自己动手从0开始实现一个分布式RPC框架
简介: 如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现.负载均衡.序列化协议.RPC通信协议.Socket通信.异步调用.熔断降级等技术,可以全方位的提升基本素质 ...
- dotnet 构建还原失败 NuGet.targets 错误可能原因
我在一次断电关机之后,发现我所有的项目都构建不通过了,提示在 NuGet.targets 文件的第 130 行错误.原因就是存在有某个被项目引用的 NuGet 包被损坏,在进行 NuGet 还原时读取 ...
- 四:大数据架构回顾-IOTA架构
IOTA大数据架构是一种基于AI生态下的全新的数据架构模式,2018年,易观首次提出这一概念.IOTA的整体思路是设定标准数据模型,通过边缘计算技术把所有的计算过程分散在数据产生.计算和查询过程当中, ...
- 14、web 中间件加固-Tomcat 加固
1.用户配置 如果不需要控制台管理,请更改控制台用户文件注销账号信息:如果需要,请更改账户信息 修改 tomcat/conf/tomcat-user.xml 文件 注释或修改如下信息 <role ...
- v-for比v-if优先级更高
在V2当中,v-for的优先级更高,而在V3当中,则是v-if的优先级更高. 在V3当中,做了v-if的提升优化,去除了没有必要的计算, 但同时也会带来一个无法取到v-for当中遍历的item问题, ...
- QQ/钉钉远程控制和商业远程控制哪个好用
提到远程协助.远程控制,你会想到什么? 国内最古老.最被用户熟知的,大概就是QQ远程控制了.QQ远程控制,方便易用.打开聊天窗口,点窗口上方"-",再移动到如图所示的电脑-箭头图标 ...
- Lua热更学习--使用toLua中的协程
[6] C#访问调table类中的成员变量和函数 访问table中的变量和函数 lua中可以使用table作为class,因此对table中的函数访问调用是必要的根据前面对table访问和functi ...
- wpf布局递归
wpf布局递归的调用到底是怎样的顺序?我一直挺模糊. 按照继承顺序. 已知: 1.1.UIElement:声明了Measure 1.2.UIElement:声明了MeasureCore,返回Size( ...