Shell--对字符串的操作

    xiaoxiao2021-12-14  22

    1.其主要是利用了Shell内置的一系列字符串操作符号.具体的相关操作符号介绍如下: ${#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/old/new}                    使用$new,来代替第一个匹配的$old ${string//old/new}                   使用$new,代替所有匹配的$old ${string/#old/new}                  替换开头.如果$string以$old开头,那么就用$new替换 ${string/%old/new}                 替换结尾.如果$string以$old结尾,那么就用$new替换

    2.路径字符串处理 dirname ${FULLPATH}    取目录部分

    basename ${FULLPATH}   取文件名部分

    basename ${FULLPATH} ${EXT}  取文件名部分,并且去掉指定的扩展名 

    注意:不能使用正则表达式,只能使用?*的shell扩展.

    例:

    利用${string//old/new}将环境变量PATH的各个目录分开,每行显示一个.

    1   echo  -e ${PATH // :/'\n'}

    将$PATH内所有的":"换成"\n",并通过echo -e输出.

    echo的-e参数,特别处理一些字符,若没有-e,则"\n"以字符的形式输出.

    使用内部操作符代替awk,sed等外部程序,可以省略启动外部程序的时间,加快整个shell程序的运行

    一般情况,优先选择shell内部操作符,若内部操作符无法完成相应的功能,再考虑awk,sed等外部程序. 

    3.利用正则表达式处理

    PathNum = echo "${NewValue}" |grep -o ,|wc -l           #查找NewValue中的‘,’的个数 

    ${var##*string}                               从左向右截取最后一个string后面的字符

    ${var#*string}                                从左向右截取第一个string后面的字符

    ${var%%string*}                               从左向右截取第一个string前面的字符

    ${var%string*}                                从左向右截取最后一个string前面的字符 ${var:n1:n2}                                 截取变量var 从n1到n2的字符串 例: 比如var="xml.helloword.xml",string="."那么

    ${var##*.}="xml"

    ${var#*.}="helloword.xml"

    ${var%%.*}="xml"

    ${var%.*}="xml.helloword"

    这里解释下,*string和string*代码通配符,就是匹配到的字符串,有可能匹配一个两个或多个,属于字符串的子字符串,比如例子中*.对应xml.和xml.helloword.,.*对应.helloword.xml和.xml。那么##是从字符串中去除匹配到的最长的那个子字符串,#就是最短的咯,**和*同理,但是#和*的区别在于#是从字符串左边开始去除,而*是从字符串右边也就是尾端开始去除。

    4、利用Linux命令

    grep是搜索,比如某一行中含有你需要的字符串啊,等

    cut就是截取第几个字符啊,以某个分隔符为界啊等等

    sed替换啊,删除啊,新增,选取某一行啊

    awk就是一行中分成几个字段来处理,$1,$2,$3,$0等,查下手册就知道了

    转载请注明原文地址: https://ju.6miu.com/read-968254.html

    最新回复(0)