zoukankan      html  css  js  c++  java
  • shell字符串分割截取和转换总结

    一:字符串的截取

    假定有定义变量VAR=mm/aa/bb/dd

    1.获取字符串长度:echo "${#VAR}",即输出11;

    2.非贪婪模式删除左边的,保留右边的:echo "${VAR#*/}",输出aa/bb/dd;这里的贪婪模式和正则表达式的类似,即*/以非贪婪模式从左往右匹配,将匹配到的字符均删除然后返回剩余的;

    3.贪婪模式删除左侧匹配,返回右侧剩余:echo "${VAR##*/}",输出dd;这里*会一直往右匹配,然后删除最后匹配到的返回dd;

    4.非贪婪模式删除右侧匹配,保留左侧:echo "${VAR%/*}",输出mm/aa/bb;

    5.贪婪模式删除右侧匹配,保留左侧:echo "${VAR%%/*}",输出mm;

    注:如果是要截取函数的参数,则将VAR换成对应的参数的下标即可,如${1#*=}

    还有一些截取固定长度的,目前对个人不是很有用,等用到了再总结;

    二:数组的定义及将字符串转换为数组

    arr=(a b c)  # 此时arr就是一个数组,arr[0]为a,但是表示这个数组不能直接用arr而是$(arr[*])或$(arr[@]);

    看一段shell输出:

    arr=(a b cc dd "uuu mm");
    echo ${arr[0]}  # 输出:a
    echo ${arr[((${#arr[*]}-1))]}  # 输出:uuu mm,这里解释一下${#arr[*]}和${#arr[@]}是一样的即获取arr数组的length,然后通过(())对此length-1获取最后一个元素的下标,然后${arr[length-1]}获取最后一个元素即uuu mm
    echo ${#arr[4]}  # 输出第5个元素的长度,注意这个不是数组的length,而是元素(字符串)的length,输出:6
    arr[0]=mmmd  # 对数组的第一个元素进行重新赋值
    echo ${arr[0]}  # 输出此元素的最新值mmmd
    for arg in ${arr[@]}; do  # ${arr[@]}和${arr[*]}都是获取arr的所有元素(即其它语言里的数组,shell里获取数组本身不像其它语言一样直接用数组名即可,这里是${arr[*]}的格式
      echo $arg
    done

    将字符串转换为数组(这里顺便提一下"$*"和"$@"当它们没有被""包裹时是没区别的,而用""引起来后前者则将所有参数变成了一个字符串参数,后者则是一个数组)

    string="hello,shell,haha"(后面可以有;)
    array=(${string//,/ })
    可以这么理解,//,/ 就是将,替换成空格(还可以如//t/b将t转换为b);如果string="aa bb ccc"那么其实可以直接array=($string)就能将字符串转换为数组;
    通过
    mmms="helltssktll"
    nestr=${mmms//t/K}
    echo ${nestr}  # 这里输出hellKsskKll也说明${str//m/n}其实就是将str里的m换成n得到新的字符串

    还有一种$IFS的,个人感觉没这种清爽,就不介绍了;
  • 相关阅读:
    Hive初步认识,理解Hive(一)
    Beeline里面执行hive脚本 函数nvl2()与replace()报错
    Navicat定时在MySQL与MySQL数据库之间自动传输数据
    Hive 报错 Error while compiling statement: FAILED: ParseException line 1:0 character '' not supported here (state=42000,code=40000)
    关于大数据T+1执行流程
    Hive部分函数解析
    关于JDK动态代理与Cglib代理
    关于Excel做表小知识记录
    Java实现自定义注解开发
    bzoj1179[Apio2009]Atm
  • 原文地址:https://www.cnblogs.com/silentdoer/p/8798010.html
Copyright © 2011-2022 走看看