zoukankan      html  css  js  c++  java
  • Bash 中常见的字符串操作

    连接字符串

    字符串连接的方式简单又直接:放在一起就可以了!
    看下面的例子:

    h="hello"
    hw=${h}" world"
    echo ${hw}

    结果为:hello world

    获取字符串长度

    ${#string}

    MyString=abcABC123ABCabc
    echo ${#MyString}           # 结果为 15

    注意这会自动去掉字符串结尾处的空格,如果在字符串中包含空格(开头、中间或结尾),就需要使用引号把字符串包裹起来:

    MyString="abcABC123ABCabc "
    echo ${#MyString}           # 结果为 16

    匹配字符串开头的子串长度

    expr match "$string" '$substring'
    $substring 是一个正则表达式。

    MyString=abcABC123ABCabc
    echo $(expr match "$MyString" 'abc[A-Z]*.2')   # 结果为 8

    索引

    expr index $string $substring
    在字符串 $string 中匹配到的 $substring 第一次出现的位置。

    MyString=abcABC123ABCabc
    echo $(expr index "$MyString" C12) # 6,注意:索引是从 1 开始的。

    提取子串

    ${string:position}
    在 $string 中从位置 $position 处开始提取子串。
    如果 $string 是 "*" 或者 "@",那么将会提取从位置 $position 开始的位置参数。
    ${string:position:length}
    在 $string 中从位置 $position 开始提取 $length 长度的子串。

    MyString=abcABC123ABCabc
    echo ${MyString:3}       # ABC123ABCabc,注意:此时索引是从 0 开始的。
    echo ${MyString:1:5}     # bcABC
    
    echo ${*:2} # 打印出第 2 个和后边所有的位置参数。
    echo ${@:2} # 同上。
    echo ${*:2:3} # 从第 2 个开始, 连续打印 3 个位置参数。

    expr match "$string" '($substring)'
    从 $string 的开始位置提取 $substring,$substring 是正则表达式。

    MyString=abcABC123ABCabc
    echo $(expr match "$MyString" '(.[b-c]*[A-Z]..[0-9])') # abcABC1

    删除子串

    ${string#substring}
    从 $string 的开头位置截掉最短匹配的 $substring。
    ${string##substring}
    从 $string 的开头位置截掉最长匹配的 $substring。

    MyString=abcABC123ABCabc
    echo ${MyString#a*C} # 123ABCabc
    # 截掉 'a''C' 之间最短的匹配字符串。
    
    echo ${MyString##a*C} # abc
    # 截掉 'a''C' 之间最长的匹配字符串。

    ${string%substring}
    从 $string 的结尾位置截掉最短匹配的 $substring。
    ${string%%substring}
    从 $string 的结尾位置截掉最长匹配的 $substring。

    MyString=abcABC123ABCabc
    echo ${MyString%b*c} # abcABC123ABCa
    # 从 $MyString 的结尾位置截掉 'b''c' 之间最短的匹配。
    
    echo ${MyString%%b*c} # a
    # 从 $MyString 的结尾位置截掉 'b''c' 之间最长的匹配。

    当你需要构造文件名的时候,这个操作就显得特别有用。

    子串替换

    ${string/substring/replacement}
    使用 $replacement 来替换第一个匹配的 $substring。
    ${string//substring/replacement}
    使用 $replacement 来替换所有匹配的 $substring。

    MyString=abcABC123ABCabc
    echo ${MyString/abc/xxx} # xxxABC123ABCabc
    echo ${MyString/ABC/XXX} # abcXXX123ABCabc
    # 替换第一个匹配到的子串。
    
    echo ${MyString//abc/xxx} # xxxABC123ABCxxx
    echo ${MyString//ABC/XXX} # abcXXX123XXXabc
    # 替换所有匹配到的子串。

    ${string/#substring/replacement}
    如果 $substring 匹配 $string 的开头部分,那么就用 $replacement 来替换 $substring。
    ${string/%substring/replacement}
    如果 $substring 匹配 $string 的结尾部分,那么就用 $replacement 来替换 $substring。

    MyString=abcABC123ABCabc
    echo ${MyString/#abc/XXX} # XXXABC123ABCabc
    # 用 'XXX' 替换开头的 'abc'echo ${MyString/%abc/XXX} # abcABC123ABCXXX
    # 用 'XXX' 替换结尾的 'abc'

    参考:
    Linux Shell 字符串操作(长度/查找/替换)详解
    Linux脚本shell字符串处理,基本都有
    shell脚本抽取文本文件中指定字符串的方法

    Bash Parameter Substitution

  • 相关阅读:
    Codeforces Round #551 (Div. 2) 题解
    【BZOJ5496】[十二省联考2019]字符串问题(后缀树)
    省选题记录
    【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)
    Codeforces Global Round 2
    Android Studio安装使用图文教程(转)
    JAVA基础学习day15--集合二 TreeSet和泛型
    AndroidDevTools下载地址
    JAVA基础学习day14--集合一
    JAVA----编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
  • 原文地址:https://www.cnblogs.com/sparkdev/p/10006970.html
Copyright © 2011-2022 走看看