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. vscode使用npm安装依赖报错

    1.报错信息 npm ERR! code EPERM npm ERR! syscall open npm ERR! path C:\Node\node_cache_cacache\index-v5\4 ...

  2. OceanBase初体验之Docker快速部署试用环境

    前置条件 准备好一台安装了 Docker 的 Linux 服务器,确保能够连接到 Docker Hub 仓库. 执行以下命令拉取最新的 OceanBase 镜像: docker pull oceanb ...

  3. CSP 考前集训 10/15

    \({\color{Green} \mathrm{A\ -\ 染色}}\) 观察此题,我们可以发现正序维护不好求,会有红点被覆盖等情况. 考虑倒着求,每一次如果操作是红那么久看区间内有多少已经染色的点 ...

  4. 模拟IDC spark读写MaxCompute实践

    简介: 现有湖仓一体架构是以 MaxCompute 为中心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不愿意对公网暴露集群内部信息,需要从 Hadoop 集群发起访问云上的数据.本文以 ...

  5. 技术干货|基于Apache Hudi 的CDC数据入湖「内附干货PPT下载渠道」

    ​简介: 阿里云技术专家李少锋(风泽)在Apache Hudi 与 Apache Pulsar 联合 Meetup 杭州站上的演讲整理稿件,本议题将介绍典型 CDC 入湖场景,以及如何使用 Pulsa ...

  6. 在线运行代码的 PHP 沙盒环境实现

      演示: 多版本PHP运行代码 作用: 方便作为独立的调试环境运行 一些 临时逻辑,查看执行结果. 方便比较不同版本的 PHP 执行差异,进行一般的兼容性测试. 思路: Docker镜像构建多个PH ...

  7. 记录一次fs通话无声的问题

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. fs的实际应用中,由于网络.配置等问题,经常会产生通话无声的问题. 环境 CentOS 7.9 freeswitch 1.10.7 ...

  8. iOS LLVM 中的宏定义

    在阅读 Objc 库源码时常常会遇到很多宏定义,比如宏 SUPPORT_INDEXED_ISA.SUPPORT_PACKED_ISA,代码如下所示: // Define SUPPORT_INDEXED ...

  9. postgresql建表空间、建库、建模式、建用户的规范

    一.官方概念说明 1.表空间(表空间位置不应该位于数据目录内) 性能优化:您可以将高I/O的表和索引放在高速磁盘上,而将不经常访问的表放在普通的磁盘上. 管理磁盘空间:当数据库存储空间不足时,可以通过 ...

  10. uniapp清除指定key缓存

    清除缓存 onLaunch: function () { console.log('App Launch') const preservedKeys = ['ishowFixPre', 'readTi ...