手机版
你好,游客 登录 注册
背景:
阅读新闻

Bash 中常见的字符串操作

[日期:2018-12-11] 来源:cnblogs.com/sparkdev  作者:sparkdev [字体: ]

获取字符串长度

${#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公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2018-12/155791.htm

linux
相关资讯       Bash字符串操作  字符串操作 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款