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字符串截取的更多相关文章

  1. Linux入门篇(六)——Shell(二)

    这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...

  2. 【Shell编程】Shell程序设计

    1.Shell简介   作为Linux灵感来源的Unix系统最初是没有图形化界面的,所有的任务都是通过命令行来实现的.因此,Unix的命令行系统得到了很大的发展,逐步成为一个功能强大的系统.   Sh ...

  3. Linux入门篇(五)——Shell(一)

    这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...

  4. Linux shell编程02 shell程序的执行 及文件权限

    第一个shell脚本 1.       shell编程的方式 交互式shell编程 非交互式shell编程:执行的语句存放到一个文件 shell脚本:可以任意文件名,建议扩展名为sh 2.       ...

  5. shell编程01—shell基础

    01.学习shell编程需要的知识储备 1.vi.vim编辑器的命令,vimrc设置 2.命令基础,100多个命令 3.基础.高端的网络服务,nfs,rsync,inotify,lanmp,sersy ...

  6. Shell基础(四):字符串截取及切割、字符串初值的处理、基使用Shell数组、expect预期交互、使用正则表达式

    一.字符串截取及切割 目标: 使用Shell完成各种Linux运维任务时,一旦涉及到判断.条件测试等相关操作时,往往需要对相关的命令输出进行过滤,提取出符合要求的字符串. 本案例要求熟悉字符串的常见处 ...

  7. Shell脚本8种字符串截取方法总结

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. 代码如下: echo ${va ...

  8. Linux shell编程 4 ---- shell中的循环

    1 for循环 1 for语句的结构 for variable in values; do statement done 2 for循环通常是用来处理一组值,这组值可以是任意的字符串的集合 3 for ...

  9. shell编程—注释、字符串和数组(四)

    shell注释 以#作为注释符号 shell中没有多行注释,只能一行加一个#号 字符串操作 1.拼接字符串 2.获取字符串长度 string=“khjf” echo ${#string} 3.提取子字 ...

  10. Linux基础篇二:Bash shell(壳,命令解释器)介绍

    shell执行方式: 第一:输入命令  (简单工作) 第二:   脚本  (适合大量工作) Bash shell 实际上的叫法是  GNU/Bash    如何查询呢:  bash - version ...

随机推荐

  1. 菜鸟 CPaaS 平台微服务治理实践

    简介: 在使用 MSE 的云产品之后,对 PaaS 平台层来说,避免很多重复功能的建设.在我们业务侧实际落地的远不止如上列举的场景,比如:服务优雅停机.注册中心等能力,均解决了业务侧的微服务治理上的难 ...

  2. dotnet 5 的 bin 文件夹下的 ref 文件夹是做什么用的

    本文来和大家聊聊在 dotnet 5 和 dotnet 6 或更高版本的 dotnet 构建完成,在 bin 文件夹下,输出的 ref 文件夹.在此文件夹里面,将会包含项目程序集同名的 dll 文件, ...

  3. (数据科学学习手札160)使用miniforge代替miniconda

    本文已收录至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,conda作为Python数据科学领域 ...

  4. CF1912K

    题意:给定一个长度为 n 的序列,求有多少个子序列满足该子序列内任意相邻 3 个数的和为偶数. 只与奇偶有关,所以可以把状态转化为 01 的. 设 \(f[i][x][y]\) 表示在前 i 个数中, ...

  5. R_回归模型实例一

    工作和生活中存在大量的具有相关性的事件,当找到不同变量之间的关系,我们就会用到回归分析.回归分析(Regression Analysis):是用来确定2个或2个以上变量间关系的一种统计分析方法. 在回 ...

  6. 超轻量级的c#版基于文件的日志记录工具,可定制输出格式,可指定日志文件

    这是我自己个人编写的日志记录,主要使用在只需要记录日志,偶尔到文件中查看一下日志记录的情况.我自己写的一些服务之类的是使用了这个的,代码很少,使用很简单. 第一步 搜索和安装我的Nuget包 搜索和安 ...

  7. WEB集群 - LNMT集群架构部署zrlog

    目录 1. 集群环境说明 2. NFS部署 3. mysql部署 4. redis部署 5. tomcat部署 6. nginx负载均衡部署 7. 客户端访问 8. tomcat+redis实现会话共 ...

  8. css样式相关的惊艳的属性

    CSS gap 简写属性用于设置行与列之间的间隙(网格间距). 规范的早期版本将该属性命名为 grid-gap,且为了保持与旧网站的兼容性,浏览器仍然会接受 grid-gap 作为 gap 的别名. ...

  9. IPv6 — 移动性

    目录 文章目录 目录 前文列表 IPv6 的移动性 移动操作 路由优化 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> <IPv6 ...

  10. SCSS随笔-mixin与@extend

    变量 定义变量 $color-white: white; 使用变量 body { background-color: $color-white; } @mixin 与 @include 定义mixin ...