添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串。

Shell 编程 字符串截取命令

既然需要指定起始位置,那么就涉及到计数方向的问题,到底是从字符串左边开始计数,还是从字符串右边开始计数。答案是 Shell 同时支持两种计数方式。

1) 从字符串左边开始计数

如果想从字符串的左边开始计数,那么截取字符串的具体格式如下:
${string: start :length}

其中,string 是要截取的字符串,start 是起始位置(从左边开始,从 0 开始计数),length 是要截取的长度(省略的话表示直到字符串的末尾)。

url="jb51.net" echo ${url: 2: 9}

结果为biancheng。

url="jb51.net" echo ${url: 2} #省略 length,截取到字符串末尾

结果为biancheng.net。

2) 从右边开始计数

如果想从字符串的右边开始计数,那么截取字符串的具体格式如下:
${string: 0-start :length}

同第 1) 种格式相比,第 2) 种格式仅仅多了0-,这是固定的写法,专门用来表示从字符串右边开始计数。

这里需要强调两点:

  • 从左边开始计数时,起始数字是 0(这符合程序员思维);从右边开始计数时,起始数字是 1(这符合常人思维)。计数方向不同,起始数字也不同。
  • 不管从哪边开始计数,截取方向都是从左到右。
  • url="jb51.net" echo ${url: 0-13: 9}

    结果为biancheng。从右边数,b是第 13 个字符。

    url="jb51.net" echo ${url: 0-13} #省略 length,直接截取到字符串末尾

    结果为biancheng.net。

    从指定字符(子字符串)开始截取

    这种截取方式无法指定字符串长度,只能从指定字符(子字符串)截取到字符串末尾。Shell 可以截取指定字符(子字符串)右边的所有字符,也可以截取左边的所有字符。

    1) 使用 # 号截取右边字符

    使用#号可以截取指定字符(或者子字符串)右边的所有字符,具体格式如下:
    ${string#*chars}

    其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*是通配符的一种,表示任意长度的字符串。*chars连起来使用的意思是:忽略左边的所有字符,直到遇见 chars(chars 不会被截取)。

    请看下面的例子:
    url="/uploads/tupian/20220823/mxevqyveig2/index.html" echo ${url#*:}

    结果为//jb51.net/index.html。

    以下写法也可以得到同样的结果:
    echo ${url#*p:} echo ${url#*ttp:}

    如果不需要忽略 chars 左边的字符,那么也可以不写*,例如:
    url="/uploads/tupian/20220823/mxevqyveig2/index.html" echo ${url#http://}

    结果为jb51.net/index.html。

    注意,以上写法遇到第一个匹配的字符(子字符串)就结束了。例如:
    url="/uploads/tupian/20220823/mxevqyveig2/index.html" echo ${url#*/}

    结果为/jb51.net/index.html。url 字符串中有三个/,输出结果表明,Shell 遇到第一个/就匹配结束了。

    如果希望直到最后一个指定字符(子字符串)再匹配结束,那么可以使用##,具体格式为:
    ${string##*chars}

    请看下面的例子:
    #!/bin/bash url="/uploads/tupian/20220823/mxevqyveig2/index.html" echo ${url#*/} #结果为 /jb51.net/index.html echo ${url##*/} #结果为 index.html str="---aa+++aa@@@" echo ${str#*aa} #结果为 +++aa@@@ echo ${str##*aa} #结果为 @@@

    2) 使用 % 截取左边字符

    使用%号可以截取指定字符(或者子字符串)左边的所有字符,具体格式如下:
    ${string%chars*}

    请注意*的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以*应该位于 chars 的右侧。其他方面%和#的用法相同,这里不再赘述,仅举例说明:
    #!/bin/bash url="/uploads/tupian/20220823/mxevqyveig2/index.html" echo ${url%/*} #结果为 /uploads/tupian/20220823/mxevqyveig2 echo ${url%%/*} #结果为 http: str="---aa+++aa@@@" echo ${str%aa*} #结果为 ---aa+++ echo ${str%%aa*} #结果为 ---

    最后,我们对以上 8 种格式做一个汇总,请看下表:

    到此这篇关于Shell字符串截取的实现方法(非常详细)的文章就介绍到这了,更多相关Shell字符串截取内容请搜索站长源码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持站长源码网!

    本文从互联网转载,来源地址:www.downzz.com/linux-shell/170151.html,原作者保留一切权利,若侵权或引用不当,请联系茶猫云(cmy.cn)删除。【茶猫云,优质云服务器提供商】

  • << 上一篇
  • 下一篇 >>
  • python was not found but,python的library

    我正在尝试使用py2exe,现在我在构建py2exe附带的示例和教程时遇到了麻烦.我运行setup.py,这很好但是当我尝试运行创建的exe时,我得到“LoadLibrary(pythondll)失败”错误.我没有从dist目录移动e

    如何在Linux中使用netstat命令查看80端口的连接数

    今天本站与大家分享了如何使用netstat命令来检查Linux中端口80的连接数。本站认为它非常实用,所以他分享给你学习。希望你看完这篇文章能有所收获。话不多说,让我们和本站一起看看服务器上的一些统计数据:1)统计80端口连接数netstat-NAT|grep-I"80“|WC-l2)统计httpd协议

    服务器托管什么情况下会发生故障?

    除了在服务器机房的恒定条件下保持机器的良好运行,服务器托管后的维护也要及时解决服务器网站的问题。那么,服务器托管后什么时候容易出现问题,服务器托管在什么情况下会失败?我们来看看下面这篇文章!服务器托管什么情

    高防服务器的原理是什么

    高防服务器的原理是:1、利用充足的机器承受恶意攻击,从而消耗黑客攻击资源,达到防御;2、定时扫描网络主节点,排查服务器上的潜在安全隐患并进行处理;3、在主干节点配置防火墙,提高服务器的防御能力;4、将高防服务器上不必要的端口和服务进行关闭,减少被攻击