Linux shell字符串截取

原文参考 https://www.cnblogs.com/cavan2021/p/17484032.html

自己试过之后,觉得有些地方需要进一步说明,写一点自己的理解。

一、从指定位置截取,截掉左边,保留右边

${string: start :length}
从 string 字符串的左数第 start 个字符开始,向右截取 length 个字符。
${string: start}
从 string 字符串的左数第 start 个字符开始截取,直到最后。

${string: -start :length}
从 string 字符串的右数第 start 个字符开始,向右截取 length 个字符。注意这里的-是负号,类似python的list操作
${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: -10: 5}
baidu

左数从0开始,右数从-1开始。

注意冒号(:)之后的空格,没有空格不会报错,但命令可能没有效果,原因不明。

[root@abc-1 ~]# echo ${url: 10}
w.baidu.com/
[root@abc-1 ~]# echo ${url:10}
w.baidu.com/
[root@abc-1 ~]# echo ${url: -10}
baidu.com/
[root@abc-1 ~]# echo ${url:-10}
https://www.baidu.com/

二、从指定字符截取

${string#*chars}

左数第一次出现的chars为分隔符,截取其右侧的所有字符。

${string##*chars}

右数第一次出现的chars为分隔符,截取其右侧的所有字符。

${string%chars*}

右数第一次出现的chars为分隔符,截取其左侧的所有字符。

${string%%chars*}

左数第一次出现的chars为分隔符,截取其左侧的所有字符。

[root@abc-1 ~]# echo ${url#*.}
baidu.com/
[root@abc-1 ~]# echo ${url%%.*}
https://www
[root@abc-1 ~]# echo ${url##*.}
com/
[root@abc-1 ~]# echo ${url%.*}
https://www.baidu

可见:(1)无论#还是%,被识别为分隔符的那个字符一定会被丢掉。

(2)除了被丢掉的分隔符,#和%%互补,%和##互补。

(3)注意星号*的位置:#和*相连,后接分隔符;%和*分开,中间是分隔符。

(4)似乎不需要用反斜杠\来转义,即使空格也能被识别为字符。

 

posted @   yqf59  阅读(177)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示