Java码界探秘 Java码界探秘
首页
  • 基础

    • 对象的概念
    • 万物皆对象
    • 控制流
    • 初始化和垃圾回收
    • 封装
    • 复用
    • 多态
    • 接口
    • 内部类
    • 集合
  • 高级

    • 函数式编程
    • 流式编程
    • 异常
    • 代码校验
    • 文件
    • 字符串
    • 类型信息
    • 泛型
    • 数组
    • 枚举
    • 注解
    • 并发编程
    • 设计模式
  • 扩展

    • 编程指南
    • 文档注释
    • 对象传递和返回
    • 流式 IO
    • New IO
    • 理解 equals 和 hashCode 方法
    • 关于集合
    • 并发底层原理
    • 数据压缩
    • 对象序列号
    • C++ 和 Java 的优良传统
  • 基础

    • Netty源码解析
    • Netty概述
    • Netty中的buffer
    • Channel中的Pipeline
    • Netty与Reactor模式
    • Netty中的Handler
    • Netty中的HashedWheelTimer
    • Netty中的Channel(下)
    • Netty中的异步
  • 高级

    • Recycler对象池分析
    • FastThreadLocal源码解析
    • SocketChannel 读取ByteBuf 的过程
    • Netty 内存池分析
    • Netty如何实现高性能内存管理
    • 线程池EventLoopGroup源码分析
    • Netty实例构建一个socks proxy
    • Netty4.x用户指南
    • Netty4和Netty3对比
    • Netty3.2用户指南
    • 3.2 ChannelEvent (opens new window)
    • Netty3.x源码解析
    • 4.x DefaultPromise (opens new window)
  • 基础教程

    • Hello, World!
    • 变量Variables
    • 将参数传递给脚本
    • 数组
    • 数组比较
    • 基础运算符
    • 基础字符串操作
    • 逻辑表达式
    • 循环
    • Shell函数
  • 高级教程

    • 特殊变量
    • 字符串操作
    • 捕捉信号命令
    • 文件测试
    • 管道
    • 输入输出
    • Sed命令介绍
    • Sftp命令介绍
  • 知行:技术人的管理之路(脑图)
  • 软件开发中团队首领的好坏之分
  • 制定规划的策略
  • 打造最佳开发团队的几点建议
  • 给老板汇报技术规划的一些要点
  • 技术的价值怎么在非技术领导心里提现出来?
  • 性格内向,不善言辞的人能做管理吗?
  • 研发管理:与员工一对一交流的执行与反思
首页
  • 基础

    • 对象的概念
    • 万物皆对象
    • 控制流
    • 初始化和垃圾回收
    • 封装
    • 复用
    • 多态
    • 接口
    • 内部类
    • 集合
  • 高级

    • 函数式编程
    • 流式编程
    • 异常
    • 代码校验
    • 文件
    • 字符串
    • 类型信息
    • 泛型
    • 数组
    • 枚举
    • 注解
    • 并发编程
    • 设计模式
  • 扩展

    • 编程指南
    • 文档注释
    • 对象传递和返回
    • 流式 IO
    • New IO
    • 理解 equals 和 hashCode 方法
    • 关于集合
    • 并发底层原理
    • 数据压缩
    • 对象序列号
    • C++ 和 Java 的优良传统
  • 基础

    • Netty源码解析
    • Netty概述
    • Netty中的buffer
    • Channel中的Pipeline
    • Netty与Reactor模式
    • Netty中的Handler
    • Netty中的HashedWheelTimer
    • Netty中的Channel(下)
    • Netty中的异步
  • 高级

    • Recycler对象池分析
    • FastThreadLocal源码解析
    • SocketChannel 读取ByteBuf 的过程
    • Netty 内存池分析
    • Netty如何实现高性能内存管理
    • 线程池EventLoopGroup源码分析
    • Netty实例构建一个socks proxy
    • Netty4.x用户指南
    • Netty4和Netty3对比
    • Netty3.2用户指南
    • 3.2 ChannelEvent (opens new window)
    • Netty3.x源码解析
    • 4.x DefaultPromise (opens new window)
  • 基础教程

    • Hello, World!
    • 变量Variables
    • 将参数传递给脚本
    • 数组
    • 数组比较
    • 基础运算符
    • 基础字符串操作
    • 逻辑表达式
    • 循环
    • Shell函数
  • 高级教程

    • 特殊变量
    • 字符串操作
    • 捕捉信号命令
    • 文件测试
    • 管道
    • 输入输出
    • Sed命令介绍
    • Sftp命令介绍
  • 知行:技术人的管理之路(脑图)
  • 软件开发中团队首领的好坏之分
  • 制定规划的策略
  • 打造最佳开发团队的几点建议
  • 给老板汇报技术规划的一些要点
  • 技术的价值怎么在非技术领导心里提现出来?
  • 性格内向,不善言辞的人能做管理吗?
  • 研发管理:与员工一对一交流的执行与反思
  • 基础教程

    • Hello World
    • 变量Variables
    • 将参数传递给脚本
    • 数组
    • 数组比较
    • 基础运算符
    • 基础字符串操作
    • 逻辑表达式
    • 循环
    • Shell函数
  • 高级教程

    • 特殊变量
    • 字符串操作
      • 捕捉信号命令
      • 文件测试
      • 管道
      • 输入输出
      • Sed命令介绍
      • Sftp命令介绍
    • Shell教程
    • 高级教程
    daichangya
    2024-05-10
    目录

    字符串操作

    在bash shell中,当您使用美元符号后跟变量名称时,shell会使用其值扩展该变量。Shell的此功能称为参数扩展。

    但是参数扩展还有许多其他形式,可让您扩展参数并修改值或在扩展过程中替换其他值。在本文中,让我们介绍一下如何使用参数扩展概念进行字符串操作。

    # 1.确定Bash Shell脚本中的字符串长度

    ${#string}
    

    上面的格式用于获取给定bash变量的长度。

    $ cat len.sh
    #!/bin/bash
    var="Welcome to the geekstuff"
    echo ${#var}
    
    $ ./len.sh
    
    24
    

    # 2.从Bash Shell脚本中的变量中提取子字符串

    Bash提供了一种从字符串中提取子字符串的方法。下面的示例说明如何解析从特定位置开始的n个字符。

    ${string:position}
    

    在$position处从$string中提取子字符串

    ${string:position:length}
    

    从$position开始,从$string提取$length个字符子串。在下面的示例中,第一个echo语句返回从第15个位置开始的子字符串。第二个echo语句从第15个位置开始返回4个字符。长度必须是大于或等于零的数字。

    $ cat substr.sh
    #!/bin/bash
    
    var="Welcome to the zthinker.com"
    
    echo ${var:15}
    echo ${var:15:4}
    
    $ ./substr.sh
    zthinker.com
    zthi
    

    另外,请参阅我们前面的文章以了解有关$*,$@,$#,$$,$!,$?,$-,$_ bash特殊参数的更多信息 (opens new window)。

    # 3.最短子串匹配

    以下语法从$string前面删除$substring的最短匹配项

    ${string#substring}
    

    以下语法从$string的后面删除$substring的最短匹配项

    ${string%substring}
    

    以下示例Shell脚本解释了上面两个最短的子字符串匹配概念。

    $ cat shortest.sh
    #!/bin/bash
    
    filename="bash.string.txt"
    
    echo ${filename#*.}
    echo ${filename%.*}
    
    $ ./shortest.sh
    从最前面删除最短匹配项后:string.txt 
    从背面删除最短匹配项后:bash.string
    

    在第一个echo语句中,子字符串“*,”。匹配字符和一个点,并且#从字符串的开头剥离,因此将子字符串“ bash”剥离。来自名为filename的变量。在第二个echo语句中,子字符串'.*'与子字符串匹配,以点开头,并且%从字符串后面剥离,因此它删除了子字符串'.txt'。

    # 4.最长子串匹配

    以下语法从$string前面删除$substring的最长匹配项

    ${string##substring}
    

    以下语法从$string的后面删除$substring的最长匹配项

    ${string%%substring}
    

    下面的示例Shell脚本解释了上面两个最长的子字符串匹配概念。

    $ cat longest.sh
    #!/bin/bash
    
    filename="bash.string.txt"
    
    echo "After deletion of longest match from front:" ${filename##*.}
    echo "After deletion of longest match from back:" ${filename%%.*}
    
    $ ./longest.sh
    After deletion of longest match from front: txt
    After deletion of longest match from back: bash
    

    在上面的示例中,##*. 去除“*.”的最长匹配项。匹配“ bash.string”。因此,将其剥离后,它将打印剩余的txt。然后%%.*从后面匹配“ .string.txt”的.*中删除最长匹配项,删除后返回“ bash”。

    # 5.在Bash Shell脚本中查找和替换字符串值

    # 只替换第一个比赛

    ${string/pattern/replacement}
    

    它与变量$string中的模式匹配,并仅用替换替换模式的第一个匹配项。

    $ cat firstmatch.sh
    #!/bin/bash
    
    filename="bash.string.txt"
    
    echo "After Replacement:" ${filename/str*./operations.}
    
    $ ./firstmatch.sh
    After Replacement: bash.operations.txt
    

    # 替换所有比赛

    ${string//pattern/replacement}
    

    它用替换替换模式的所有匹配项。

    $ cat allmatch.sh
    #!/bin/bash
    
    filename="Path of the bash is/bin/bash"
    
    echo "After Replacement:" ${filename//bash/sh}
    
    $ ./allmatch.sh
    After Replacement: Path of the sh is/bin/sh
    

    关于查找和替换,请参考我们之前的文章-sed替代示例 (opens new window)和Vim查找和替换 (opens new window)。

    # 替换开始和结束

    ${string/#pattern/replacement}
    

    仅当模式与$string的开头匹配时,以下语法才用替换字符串替换。

    ${string/%pattern/replacement}
    

    仅当模式在给定的$string末尾匹配时,以下语法才用替换字符串替换。

    $ cat posmatch.sh
    #! /bin/bash
    
    filename="/root/admin/monitoring/process.sh"
    
    echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
    echo "Replaced at the end": ${filename/%.*/.ksh}
    
    $ ./posmatch.sh
    Replaced at the beginning: /tmp/admin/monitoring/process.sh
    Replaced at the end: /root/admin/monitoring/process.ksh
    
    上次更新: 2024/05/11, 17:55:08
    特殊变量
    捕捉信号命令

    ← 特殊变量 捕捉信号命令→

    Theme by Vdoing | Copyright © 2019-2024 daichangya | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式