得之我幸 失之我命

when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.

Shell 字符串截取和替换

字符串操作是个永远绕不过的题,截取和替换都是必不可少的

1
2
3
4
5
6
7
8
9
10
11
12
13
# shell 中截取字符串的方法很多
${var#*/}
${var##*/}
${var%/*}
${var%%/*}
${var:start:len}
${var:start}
${var:0-start:len}
${var:0-start}

# shell 字符串变量值的替换
${var/sct/dst}
${var//sct/dst}
  1. 获得字符串的长度

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 语法:${#var}

    $ str="abcdefg/hijklmn/opqrstu/vwxyz"
    $ echo "string : [${str}]"
    string : [abcdefg/hijklmn/opqrstu/vwxyz]

    $ length=${#str}
    $ echo "length : [${length}]"
    length : [29]
  2. 使用 # 和 ## 获取尾部子字符串,删左留右

    • 使用 # 最小限度从前面截取 string,从左边开始,删除第一个 string 以及左边的所有字符

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${parameter#string}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      $ substr=${str#*/} # 分割符为 '/'
      $ echo "substr : [${substr}]"
      substr : [hijklmn/opqrstu/vwxyz]
    • 使用 ## 最大限度从前面截取 string,从左边开始,删除最后一个 string 以及左边的所有内容

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${parameter##string}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      $ substr=${str##*/} # 分割符为 '/'
      $ echo "substr : [${substr}]"
      substr : [vwxyz]
  3. 使用 % 和 %% 获取头部子字符串,删右留左

    • 使用 % 最小限度从后面截取 string,从右边开始,删除遇到的第一个 string 以及右边所有的内容

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${parameter%string}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      $ substr=${str%/*}
      $ echo "substr : [${substr}]"
      substr : [abcdefg/hijklmn/opqrstu]
    • 使用 %% 最大限度从后面截取 string,从右边开始,删除遇到的最后(也就是最左边)一个 string 以及右边所有内容

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${parameter%%string}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      $ substr=${str%%/*}
      $ echo "substr : [${substr}]"
      substr : [abcdefg]
  4. 使用 ${var:} 模式获取子字符串

    • 指定从左边第几个字符开始以及子串中字符的个数

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${var:start:len}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      $ substr=${str:7:3} # 其中的 7 表示左边第一个字符开始,3 表示子字符的总个数
      $ echo "substr : [${substr}]"
      substr : [/hi]
    • 从左边第几个字符开始一直到结束

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${var:index}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      substr=${str:7} # 其中的 7 表示左边第 8 个字符开始
      $ echo "substr : [${substr}]"
      $ substr : [/hijklmn/opqrstu/vwxyz]
    • 从右边第几个字符开始以及字符的个数

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${var:0-start:len}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      $ substr=${str:0-23:5} # 其中的 0-23 表示右边算起第 23 个字符开始,5 表示字符的个数
      $ echo "substr : [${substr}]"
      substr : [g/hij]
    • 从右边第几个字符开始一直到结束

      1
      2
      3
      4
      5
      6
      7
      8
      # 语法:${var:0-start}
      str="abcdefg/hijklmn/opqrstu/vwxyz"
      echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      substr=${str:0-6} # 其中的 0-6 表示右边算起第 6 个字符开始
      echo "substr : [${substr}]"
      substr : [/vwxyz]
  5. 使用 / 和 // 进行字符串替换

    • 使用 / 将第一个 sct 替换为 dst

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${var/sct/dst}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      $ substr=${str/\//$} # 将 / 替换为 $
      $ echo "substr : [${substr}]"
      substr : [abcdefg$hijklmn/opqrstu/vwxyz]
    • 使用 // 将全部的 sct 替换为 dst

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # 语法:${var//sct/dst}

      $ str="abcdefg/hijklmn/opqrstu/vwxyz"
      $ echo "string : [${str}]"
      string : [abcdefg/hijklmn/opqrstu/vwxyz]

      $ substr=${str//\//$} # 将 / 替换为 $
      $ echo "substr : [${substr}]"
      substr : [abcdefg$hijklmn$opqrstu$vwxyz]

be yourself, everyone else is already taken.