shell知识点:字符串操作整理汇总

读取字符串值
表达式含义
${chars}变量chars的值,与$chars等价
${chars-default}chars变量没有声明,则默认为default
${chars:-default}chars变量没有声明或值为空,则默认为default
${chars=default}chars变量没有被声明,则默认为$default变量的值
${chars:=default}chars变量没有被声明,或者其值为空,则默认为default
${chars+other}如果chars变量声明了,那么值为$other,否则为null字符串
${chars:+other}如果chars被设置那么其值为other,否则为null字符串
${chars?errMsg}如果chars没被声明,那么打印$errMsg值
${chars:?errMsg}如果chars没被设值,那么打印$errMsg值
${!start*}匹配之前所有以start开头进行声明的变量
${!start@}匹配之前所有以start开头进行声明的变量
字符串操作:长度、读取、替换
表达式含义
${#string}$string变量值的长度
${string:position}在$string中, 从位置$position开始提取子串
${string:position:length}在$string中, 从位置$position开始提取长度为$length的子串
${string#substring}从变量$string的开头, 删除最短匹配$substring的子串
${string##substring}从变量$string的开头, 删除最长匹配$substring的子串
${string%substring}从变量$string的结尾, 删除最短匹配$substring的子串
${string%%substring}从变量$string的结尾, 删除最长匹配$substring的子串
${string/substring/replacement}使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement}使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement}如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement}如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

定义str变量,方便下面的操作演示
在这里插入图片描述

  • ${#string} 返回$string的长度

    [root@study ~]# echo ${#str}
    20

  • ${string:position} 在$string中,从位置position之后开始截取字符串

    [root@study ~]# echo ${str:4}
    is study string

  • ${string:position:length} 从$string指定位置开始截取长度为length字符串

    [root@study ~]# echo ${str:5:2}
    is

  • ${string#substring} 从$string开头开始删除最短匹配$substring字符串

    [root@study ~]# echo ${str#this}
    is study string

  • ${string##substring} 从$string开头开始删除最长匹配$substring字符串

    [root@study ~]# echo ${str##this}
    is study string

  • ${string%substring} 从$string结尾开始删除最短匹配$substring字符串

    [root@study ~]# echo ${str%ing}
    this is study str

  • ${string%substring} 从$string结尾开始删除最长匹配$substring字符串

    [root@study ~]# echo ${str%%ing}
    this is study str

  • ${string/substring/replace} 使用$replace来代替第一个匹配的$substring字符串

    [root@study ~]# echo ${str/is/AAA}
    thAAA is study string

  • ${string/#substring/replace} 如果$string前缀匹配$substring,就用$replace来代替匹配$substring

    [root@study ~]# echo ${str/#th/AAA}
    AAAis is study string

  • ${string/#substring/replace} 如果$string后缀匹配$substring,就用$replace来代替匹配$substring

    [root@study ~]# echo ${str/%ing/AAA}
    this is study strAAA

字符串比较操作
操作符说明
-z “字符串”字符串长度为0则为真(zero)
-n “字符串”字符串长度不为0则为真(no zero)
“串1” == “串2”字符串1等于字符串2则为真,可使用=代替==
“串1” != “串2”字符串1不等于字符串2则为真
计算变量长度
chars = `seq -s " " 100`
  • echo ${#chars}
    [root@localhost ~]# echo ${#chars}
    291
    
  • echo $(expr length “$chars”)
    [root@localhost ~]# echo $(expr length "$chars")
    291
    
  • echo ${chars}|wc -m
    [root@localhost ~]# echo ${chars}|wc -m
    292
    
    比较三种方法耗时:
    [root@localhost ~]# time for i in $(seq 10000);do count=${#chars};done;
    real    0m0.206s
    user    0m0.202s
    sys     0m0.000s
    
    [root@localhost ~]# time for i in $(seq 10000);do count=`echo $(expr length "$chars")`;done;  
    real    0m46.220s
    user    0m19.111s
    sys     0m26.636s
    
    [root@localhost ~]# time for i in $(seq 10000);do count=`echo ${chars}|wc -m`;done;
    real    0m46.515s
    user    0m19.124s
    sys     0m26.974s
    
判断字符串是否为数字的多种方法
  • sed加正则表达式

     num=11;echo "$num"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] && echo 1 || echo 0
    
  • 变量的子串字符替换加正则表达式

     num=11;[ -z "`echo "${num//[0-9]/}" `" ] && echo 1 || echo 0
    或
     num=11;[ -n “$num” -a "$num" = "${num//[^0-9]/}" ] && echo 1 || echo 0
    
  • expr计算判断

     expr $num + 0 >/dev/null 2>&1
     [ $? -eq 0 ] && echo 1 || echo 0
    
判断字符串是否包含指定字符串
  • 开头
 [[ $str == str* ]]
  • 包含
 [[ $str == *str* ]]
  • 结尾
 [[ $str == *str ]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值