shell中的字符串操作

SHELL字符串操作

bash Shell提供了多种字符串处理的命令:

  • awk命令
  • expr命令

字符串长度

  • ${#..}
  • expr length
  • awk的length(s)
    实例:
    string=”hello world”
    ${#string}
    expr length “$string”
    注意:双引号是必须的,因为字符串有空格

匹配子串

格式:expr match $string $substring
作用:在string的开头匹配substring,返回匹配到的长度,在string开头匹配不到substring则返回0,substring可以是正则表达式
string=”welcome to our world”

命令返回值
expr match “$string” w.*20
expr match “$string” ou.*0

公共字符的索引

格式:expr index $string $sunstring
作用:在字符串string上匹配substring中字符第一次出现的字符
string=”welcome to our world”

命令返回值
expr index “$string” our5
expr index “$string” d20
expr index “$string” s0

运行发现,expr index的功能是寻找两个串之间的第一个公共字符

截取子串

  • 从左截取
    • ${string:position}
    • ${string:position:length}
  • 从右截取
    • ${string: -position}(冒号后面有一个空格)
    • ${string:(position)}
    • ${string: -position:length}
    • ${string:(position):length}

expr substr
格式:expr substr $string $position $length
与${}的区别:${}的position从0开始给string标号;expr sutstr的position从1开始给string标号
string=”welcome to our world”

命令返回值
echo ${string:1:8}elcome t
expr substr “$string” 2 8elcome t

正则表达式截取子串
使用正则表达式只能抽取string开头处或结尾处的子串。
- expr match $string ‘\($substring\)’
- expr $string : ‘\($substring\)’

命令返回值
expr match “$another” “[0-9]*”8
expr match “$another” “\([0-9]*\)”20091114
expr “$another” : “\([0-9]*\)”20091114

注意:冒号两侧有空格

删除子串

  • ${string#substring}
    删除string开头处与substring匹配的最短子串
  • ${string##substring}
    删除string开头处与substring匹配的最长子串
  • ${string%substring}
    删除string结尾处与substring匹配的最短子串
  • ${string%%substring}
  • 删除string结尾处与substring匹配的最长子串

substring并非正则表达式
20091114 Reading Hadoop

命令结果
echo “${another#2*1}”114 Reading Hadoop
echo “${another##2*1}”4 Reading Hadoop
echo “${another%a*p}”20091114 Reading H
echo “${another%%a*p}”20091114 Re

替换子串

  • ${string/substring/replacement}
    仅替换第一次与substring相匹配的子串
  • ${string//substring/replacement}
    替换所有与substring相匹配的子串
  • ${string/#substring/replacement}
    替换string开头处与substring相匹配的子串
  • ${string/%substring/replacement}
    替换string结尾处与substring相匹配的子串

string=”20001020year20050509month”

命令结果
echo ${string/200/201}20101020year20050509month
echo ${string/200/201}20101020year20150509month
echo ${string/r*h/}20001020yea
echo ${string/#2000/2010}20101020year20050509month
echo ${string/%month/MONTH}20001020year20050509MONTH
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值