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)似乎不需要用反斜杠\来转义,即使空格也能被识别为字符。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端