首页 > 系统相关 >shell命令--字符串截取

shell命令--字符串截取

时间:2023-04-15 14:34:28浏览次数:31  
标签:shell string -- 截取 echo 字符串 chars

shell 截取字符串通常有两种方式:截取指定长度的字符串和截取指定模式的字符串。

1. 截取指定长度的字符串

这种方式除了需要指定起始位置还需要指定截取长度。按起始位置可以分为从左边开始或者从右边开始。

a.从左边开始截取

${string:start:length}

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

示例:

#!/bin/bash

string="hello world!"
echo ${string}
echo ${string:0:7}
echo ${string:1}

其结果为:

hello world!
hello w
ello world!

b.从右边开始截取

${string:0-start:length}

start 前面加上 0- 时,代表了从右边开始。需要注意的是从右边开始计数时,起始数字是 1 。

示例:

#!/bin/bash

string="hello world!"
echo ${string}
echo ${string:0-6:5}
echo ${string:0-1}

其结果为:

hello world!
world
!

2. 截取指定模式的字符串

a. 使用 # 或者 ## 截取右边字符串

${string#*chars}
${string##*chars}

其中,string 是要截取的字符串,chars 是指定的字符串,*是通配符的一种,表示任意长度的字符串。

第一个命令是指从string字符串起始位置往右寻找 chars 字符串,找到第一个 chars 位置后,忽略 chars 以及其左边的字符串,截取右边的字符串。

第二个命令是指从string字符串起始位置往右寻找 chars 字符串,找到最后一个 chars 位置后,忽略 chars 以及其左边的字符串,截取右边的字符串。

示例:

#!/bin/bash

string=$(pwd)
echo ${string}
echo ${string#*/}
echo ${string##*/}

其结果为:

/root/workspace/shell
root/workspace/shell
shell

b. 使用 % 或者 %% 截取左边字符串

${string%chars*}
${string%%chars*}

因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以*应该位于 chars 的右侧。

第一个命令是指从string字符串结尾位置往左寻找 chars 字符串,找到第一个 chars 位置后,忽略 chars 以及其右边的字符串,截取左边的字符串。

第二个命令是指从string字符串结尾位置往左寻找 chars 字符串,找到最后一个 chars 位置后,忽略 chars 以及其右边的字符串,截取左边的字符串。

示例:

#!/bin/bash

string=$(pwd)
echo ${string}
echo ${string%/*}
echo ${string%%/*}

其结果为:

/root/workspace/shell
/root/workspace

 

标签:shell,string,--,截取,echo,字符串,chars
From: https://www.cnblogs.com/citta/p/17321101.html

相关文章

  • C++基础知识系列-1
    C++基础知识1git基础SVN(集中式版本控制器)和git(分布式版本控制器)区别​ SVN本地没有仓库信息存储代码,代码信息全部存储到云端。本地代码全部push到云端。​ git好处:版本库对提交的代码保存其版本提交记录;每次提交代码push之前先拉取代码pull,再次push时只会push经过改动的地方......
  • 7、后端学习规划:PHP学习 - 学习规划系列文章
          PHP在其阵营中被称为世界上最好的编程语言。笔者在学习了其一些框架后也有一定的经验,当时主要根据其框架进行的开发。对于PHP来说,在编程排行榜上也是有名的存在,现在还有一些网站应用也是用的PHP进行的开发,还是占有一定的席位的。 1、简介;PHP(PHP:Hypert......
  • C++基础知识系列-3
    设计模式GoF设计模式清单工厂模式和抽象工厂模式在实际开发中使用较少;单例模式是重点,针对一个类的唯一实例;单例模式:通过设计的接口getInstance()获得对象,在接口内部设计只能有一个对象。将类的构造函数定义为私有属性【外部不能创建对象】;定义一个私有的类的静态私有成员变量......
  • C++基础知识系列-2
    C++11新特性C++11易用性改进静态断言使用范围几乎不受限制static_assert断言对象必须是常量表达式,编译期给出断言警告。用于ERROR提示强枚举类型//enum关键字enum class HighSchool: unsigned int {    student,    teacher,    principal};使用强......
  • 园子的商业化努力-困境求助:开设捐助通道
    非常感谢大家对园子的支持!正是在无数园友的支持与帮助下,园子从一个业余时间的偶然变成了一份值得持之以恒为之奋斗的事业。非常感谢大家在绝境求商中提供了很多很有价值的商业化建议,我们会根据大家的建议好好规划并努力探索园子的商业化道路。在找到与园子价值吻合的商业模式或......
  • LeetCode 115. 不同的子序列
    classSolution{public:longlongf[1010][1010];//f[i][j]表示s前i个字符得到t前j个字符的所有方案intnumDistinct(strings,stringt){f[0][0]=1;intn=s.size(),m=t.size();s=''+s;t=''+t;for(inti=1;i<=n;i+......
  • 谷歌网站做外链的方法:提升排名的实用技巧
    作为一位拥有多年运营经验的个人站长,我深知在谷歌搜索引擎优化中,外链建设是一个至关重要的环节。在这篇文章中,我将为大家分享一些关于谷歌网站做外链的方法,以帮助您更好地提升网站在Google搜索引擎中的排名。了解谷歌开户的费用以及代投服务费是网站推广的基础。谷歌开户多少钱?谷歌......
  • 揭秘高效建链策略,助力外贸站提升排名
    作为一名经验丰富的站长,我对谷歌SEO外链有着深刻的认识。高质量的外链对于谷歌搜索引擎排名具有至关重要的作用。本文将分享如何通过合理的外链建设策略,为外贸站点提高谷歌排名。了解谷歌SEO新规则为了更好地进行外链建设,了解谷歌SEO新规则【2023年最新】是至关重要的。了解新规则......
  • 虾皮API接口根据关键词取商品列表(商品详情,库存,排序,价格...)返回值及说明
    参数说明通用参数说明version:API版本key:调用key,测试key:test_api_keyapi_name:API类型[item_search,item_get]cache:[yes,no]默认yes,将调用缓存的数据,速度比较快result_type:[json,xml,serialize,var_export]返回数据格式,默认为jsonlang:[cn,en,ru]翻译语言,默认cn简体中文API:i......
  • Delphi FDMemTable内存表用法及简单操作函数封装(转)
    在某些场景下当轻量级的应用需要在内存中缓存数量比较多且字段比较多的高频使用数据时。以前我都是采用Ini或直接使用sqlite数据库。JSON也试过基本无法或很难实现需要的功能,因为当涉及某一同类型对象多字段多列时不通过遍历基本无法直接取到或修改数据。这样就导致了效率的低下。......