温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

shell 字符串操作

发布时间:2020-06-25 19:05:53 来源:网络 阅读:381 作者:happytree007 栏目:编程语言

一、环境

    ubuntu14.04 x86_64

二、字符串操作

    1.获得字符串长度

        类似C语言中的strlen()

    ${#variable_name}

    eg:

$name=zhangsan
$echo ${#name}
8
$

    expr length variable_name

   note: variable_name不能为空

  $ expr length $name
  $ 8

    2.字符串提取

        类似java中的substring()

        ${variable_name:start_index:length}    从左到右,从第start_index(0)开始,length长的子串
        ${variable_name:0-start_pos:length}   从结尾倒起数第start_pos开始,length长的子串

        eg:

$echo ${name:0:4}
zhang
$echo ${name:2}    #从第二个位置开始,到结束
angsan
$echo ${name:0-4:2}
gs
$echo ${name:0-4} #从倒数第4开始,到结束
gsan
$

    3.字符串截取

    从左到右删除

    ${variable_name#*separator}   separator是你要分隔的字符,到第一个separator的位置

    ${variable#pattern} 检查是否以指定的pattern结束,如果是,则使用variable的内容并从其左侧删除pattern所能够匹配到的最短结果

    pattern:

             * 匹配零个或多个字符

            ?  匹配任意单个字符

             [...] 匹配指定字符组中任意单个字符

             [!...] 匹配不在字符组中的任意单个字符

    类似C语言中的strchr()

    eg:

$name=zhangsan-lisi-wangwu-baidi
$echo ${name#*-}
lisi-wangwu-baidi
$
$var=testcase
$echo ${var#?e}    #从左侧删除最短的匹配
scase
$echo ${var#*s}
tcase

    ${variable_name##*separator}  到最后一个separator的位置

    ${variable##pattern} 检查是否以指定的pattern结束,如果是,则使用variable的内容并从其左侧删除pattern所能够匹配到的最长结果(贪吃)

    类似C语言中的rindex()

    eg:

$echo ${name##*-}
baidi
$
$var=testcase
$echo ${var##*s}   #从左侧删除最长的匹配
e

    从右到左删除

    ${variable_name%separator*}  ${variable%pattern}

    ${variable_name%%separator*}  ${variable%%pattern}

    eg:

$echo ${name%-*}   
zhangsan-lisi-wangwu
$echo ${name%%-*}
zhangsan
$
$var=testcase
$echo ${var%e} #从右侧删除最短匹配
testcas
$echo ${var%s*e}
testca

    4.字符串拆分

    类似C语言的strtok()

    ${variable_name//ch/ch_replace}    将variable_name中的字符ch替换为ch_replace字符

    eg:

$name=zhangsan-lisi-wangwu-baidi
$name=${name//-/,}  #将横杠替换为逗号
$echo ${name}
zhangsan,lisi,wangwu,baidi
$name={name//,/ }  #将逗号替换为空格
$echo ${name}
zhangsan lisi wangwu baidi   #可用于后续的for循环
$
$var=tescase
$echo ${var%%s*e}   #从右侧删除最长匹配
te

    IFS  通过设置IFS的值,进行拆分

    
eg:

$test=aaa,bbb,ccc,ddd,eee
$arr=${test}
$echo ${arr}
aaa,bbb,ccc,ddd,eee
$OLD_IFS=$IFS
$IFS=,
$arr2=${test}
$echo ${arr2}
aaa bbb ccc ddd eee
$IFS=${OLD_IFS}


    

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI