Shell--对字符串的操作

来源:互联网 发布:深圳it软件开发 编辑:程序博客网 时间:2024/05/22 08:03

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等,查下手册就知道了


0 0
原创粉丝点击