在Shell脚本编写中,有几个地方都是要用到字符串截取的功能,那将这块的内容进行下记录:

1、字符串变量的截取操作

对字符串变量的截取操作一般都是通过${操作符}的方式进行

1)从指定位置index截取固定长度

格式:

${string:start:length}
其中,string是要截取的字符串,start是起始位置(下标从0开始计数),length是要截取的长度(省略就直接截到末尾)。

例如:

str_time='2022-02-01 12:30:58'
date_no=${str_time:0:10} #截取前面10位字符:2022-01-01
date_mon=${str_time:5:2} #从前面第6位开始截取2位字符:02
date_time=${str_time:0-8} #截取后面8位字符:12:30:58
date_hh=${str_time:0-8:2} #截取后面8位字符的前面两位:12
2)截取指定字符串(子字符串)左边的字符

格式:

${string%substr*} #匹配从右往左第一个substr
${string%%substr*} #匹配从右往左最后一个substr
说明:删除substr以及substr右边的任意字符串,*在substr的右边,那最终将会得到substr左边剩余的字符串。两个格式是区别substr的位置。

3)截取指定字符串(子字符串)右边的字符

${string#*substr} #匹配从左往右第一个substr
${string##*substr} #匹配从左往右最后一个substr
说明:删除substr以及substr左边的任意字符串,*在substr的左边,那最终将会得到substr右边剩余的字符串。两个格式的区别substr的位置。

这两个#和%截取字符串的用法,比较容易混淆。

记忆小技巧:

键盘上#号在$键的左边,所以是操作并删除左边字符,所以*在substr左边,一个#号代表取第一个substr(从左往右):${string#*substr}

键盘上%号在$键的右边,所以是操作并删除右边字符,所以*在substr的右边,一个%代表取第一个substr(从右往左):${string%substr*}

案例1:

val=“hello++world++shell”

echo ${val%++*}
# 删除最后一个 ++ 后边字符,截取前边剩下的内容
# 输出: hello++world

echo ${val%%++*}
# 删除第一个 ++ 后边字符,只截取保留第一个 ++ 前边的内容
# 输出: hello
案例2:

str_file="123.hello.json"

echo ${str_file%.*}
# 删除最后一个 . 后边的json,截取123.hello
# 输出: 123.hello
案例3:

v_str='/app/logs/133.38.112.177_202204111015.log'
echo ${v_str%/*} #截取从右往左第一个'/' 左边的字符:/app/logs
echo ${v_str%%/*} #截取从右往左最后个'/' 左边的字符:空
案例4:

v_str='/app/logs/133.38.112.177_202204111015.log'
#截取从左往右第一个'/' 右边的字符:app/logs/133.38.112.177_202204111015.log
echo ${v_str#*/}
#截取从左往右最后个'/' 右边的字符:133.38.112.177_202204111015.log
echo ${v_str##*/}
————————————————
版权声明:本文为CSDN博主「CCH2023」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chang_chunhua/article/details/128341906

转载-Shell脚本中字符串截取功能的更多相关文章

  1. Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】

    最近发现使用  -z   和  -n  来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ]    ...

  2. shell脚本中字符串的常见操作及"command not found"报错处理(附源码)

    简介 昨天在通过shell脚本实现一个功能的时候,由于对shell处理字符串的方法有些不熟悉导致花了不少时间也犯了很多错误,因此将昨日的一些错误记录下来,避免以后再犯. 字符串的定义与赋值 # 定义S ...

  3. Linux shell脚本的字符串截取

    http://blog.csdn.net/gumanren/article/details/5601544 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.ha ...

  4. Linux Shell脚本编程--字符串截取

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} ...

  5. Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

    Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...

  6. shell脚本中给字符串添加颜色

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: ec ...

  7. 学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  8. SHELL脚本编程-字符串处理

    SHELL脚本编程-字符串处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符串切片 [root@node101.yinzhengjie.org.cn ~]# echo { ...

  9. 在shell脚本中使用函数

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 对于在脚本中重复使用的功能模块,可以封装成为函数. shell脚本中函数的定义可以使用如下两种方式: a. ...

  10. shell脚本中常见的一些特殊符号和作用详解

    这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下   在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我 ...

随机推荐

  1. 2021级《JAVA语言程序设计》上机考试试题2

    以下是学生页面 首先先给上数据库 在准备准备工作 以下为代码: package Bean; public class Student { private String StuID; private S ...

  2. Java 集合中的排序算法浅析

    作者:京东物流 秦彪 1.  引言 排序是一个Java开发者,在日常开发过程中随处可见的开发内容,Java中有丰富的API可以调用使用.在Java语言中,作为集合工具类的排序方法,必定要做到通用.高效 ...

  3. SpringBoot集成Tomcat服务

    目录 一.Tomcat集成 1.依赖层级 2.自动化配置 二.Tomcat架构 三.Tomcat配置 1.基础配置 2.属性配置类 3.配置加载分析 四.周期管理方法 1.控制类 2.核心方法 五.参 ...

  4. HGAME_2023_WEB_WP_WEEK3

    Ping to the host 很明显的rce,简单测试一下发现空格,cat,:被办,且执行无回显,空格用${IFS},%09,$IFS$9等等来绕过,我们利用dnslog将执行结果外带出来,这里使 ...

  5. B树,B-树,B+树和B*树

    B树和B-树(平衡多路查找树)规则:1.排序方法:所有结点关键字按递增次序,并遵循左小右大的原则.2.子结点数:非叶子结点的子结点数>1且<=M且M>=2,空树除外(M阶代表一个树的 ...

  6. openssl国密算法库

    openssl国密算法库 一.开发背景 openssl是一个功能丰富且自包含的开源安全工具箱.它提供的主要功能有:SSL协议实现(包括SSLv2.SSLv3和TLSv1).大量软算法(对称/非对称/摘 ...

  7. 魔兽世界2009年更换代理,九城CEO至全体员工公开信

    尊敬的全体第九城市员工, 最近一段时间以来,有关九城将要失去<魔兽世界>代理权的说法甚嚣尘上,各种传言四起.在目前来自<魔兽世界>的收入仍占九城收入绝大部分的情况下,对于外界的 ...

  8. Windows 干净启动

    1. 卸载设备中全部的第三方反病毒软件与系统优化软件 (例如 360.腾讯电脑管家.鲁大师等).2. 按 "Windows 徽标键+R",输入 "msconfig&quo ...

  9. 10base-t的数据发送

    功能 数据流(NIC) pin码 发送信号 发送回路 1 2 接收信号 接收回路 3 不使用   4 不使用   5 接收信号 接收回路 6 不使用   7 不使用   8 上图是基于10BASE-T ...

  10. Mysql习题系列(三):单行函数

    案例数据 提取码:2rd5 #[题目] # 1.显示系统时间(注:日期+时间) # 2.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary) # 3.将员工的姓名按首字母排 ...