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程序的运行.
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。那么##是从字符串中去除匹配到的最长的那个子字符串,#就是最短的咯,**和*同理,但是#和*的区别在于#是从字符串左边开始去除,而*是从字符串右边也就是尾端开始去除。
grep是搜索,比如某一行中含有你需要的字符串啊,等
cut就是截取第几个字符啊,以某个分隔符为界啊等等
sed替换啊,删除啊,新增,选取某一行啊
awk就是一行中分成几个字段来处理,$1,$2,$3,$0等,查下手册就知道了