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. steam社区留言红小作文模板

    steam社区留言红小作文模板 Dear steam: Im a steam user which most play csgo.i saw i had be banned in steam comm ...

  2. 1.css的初认识

    1.什么是CSS? Cascading Style Sheet 层叠级联样式表 CSS:表现层(美化网页) 字体.颜色.边距.高度.宽度.背景图片.网页定位.网页浮动.... 2.CSS发展史 CSS ...

  3. 基于 K8s 的交付难题退退退!| 独家交付秘籍(第三回)

    简介: 经过仔细研究,我们发现秘籍中提到许多帮助解决交付问题的招式,而其中一个让我们印象很深,是关于在原有社区版容器底座 Kubernetes(以下简称 K8s)的基础上,对容器底座进行改进,可更好的 ...

  4. 阿里云数字化安全生产平台 DPS V1.0 正式发布!

    ​简介:数字化安全生产平台则帮助客户促进业务与 IT 的全面协同,从业务集中监控.业务流程管理.应急指挥响应等多维度来帮助客户建立完善专业的业务连续性保障体系. 作者:银桑.比扬 阿里云创立于 200 ...

  5. RDS PostgreSQL一键大版本升级技术解密

    ​简介: 内容简要: 一.PostgreSQL行业位置 二.PostgreSQL版本升级背景 三.PostgreSQL版本升级解密 四.PostgreSQL版本升级成果 一.PostgreSQL行业位 ...

  6. Rancher管理K8s集群(14)

    一.Rancher介绍 1.1 Rancher简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes 集群在混合云+本地 数据中心的集中部署与管理 ...

  7. HttpClient配置SSL绕过https证书以及双向认证

    HttpClient简介 1.HTTP 协议是 Internet 上使用得最多.最重要的协议之一,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 java ...

  8. 第8讲 browse命令的使用技巧

    第8讲 browse命令的使用技巧 1.浏览所有parts,使用技巧 选中工程文件*.dsn/Edit/Browse/Parts.列出工程中用到的所有元件,方便在画完原理图后,查看哪些元件没有编号或数 ...

  9. Deepin安装Python3

    https://www.jianshu.com/p/0c61bdfb9589 也可以看这篇,本文是这篇的简捷版,均原创 首先,把系统更到最新,并复制下面的代码 sudo apt update 更新软件 ...

  10. scp本地服务器和远程服务器拷贝文件

    上传本地文件到服务器 scp 本地路径 用户名@远程服务器ip:远程路径 下载文件 scp 用户名@远程服务器ip:远程路径 本地路径 -r 是上传下载本地目录到远程 远程文件