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

posted @ 2023-06-25 17:29  cavan丶keke  阅读(1631)  评论(0编辑  收藏  举报