目录
2.${parameter//pattern/string}
对于TR和CUT命令都可以用管道直接级联使用:先给出例子如下:
echo x.yy.x@x@s%a | tr "." " "|tr x y|cut -d @ -f 3|tr % " "
>> s a
tmparray=(`echo x.yy.x@x@s%a | tr "." " "|tr x y|cut -d @ -f 3|tr % " "`)
echo ${tmparray[*]}
>>s a
#可以将结果赋值给一个数组,这个数组就是分割后的字符数组
1. tr
tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
需要注意的是tr只能处理标准输入设备的数据。
tr [-cdst][--help][--version][第一字符集][第二字符集]
tr [OPTION]…SET1[SET2]
echo 1,2,3|tr , -
>>1-2-3
echo 1,2,3|tr , " "
>>1 2 3
echo 1,2,3_2:434 |tr ",_:" "@$%"
>>1@2@3$2%434
从上面的结果可以看出tr可以将指定的set1中多个字符同时替换成set2中对应位置的字符。再替换过程中是将属于set1中的每个字符都替换,而不是字符串替换和sed这一点并不相同。
该命令主要是有一些有用的字符集。如大小写替换
echo ferggwef |tr a-z A-Z
>>FERGGWEF
2.${parameter//pattern/string}
这个操作的替换是替换一个字符串,一次只能替换一个。
echo $tmp
>>1,2,3_2:434
echo ${tmp//:/%}
>>1,2,3_2%434
echo ${tmp//,_:/@$%}
1,2,3_2:434
从以上的结果可以发现和tr之间的不同,也可以测试下面的用法
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string}从左向右截取第一个string后的字符串
${varible%%string*}从右向左截取最后一个string后的字符串
${varible%string*}从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要
3.cut命令
该命令可以对文件和标准输入进行处理。
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
具体参数可参考:
#-d后面是分割符,下面的例子将1:2_3.4:5xx:6分成了4段
#1 2_3.4 5xx 6
echo 1:2_3.4:5xx:6|cut -d : -f 1- #-f表示显示字段从哪里到哪里 1-从第一个到最后一个
>>1:2_3.4:5xx:6
echo 1:2_3.4:5xx:6|cut -d : -f 2,4
>> 2_3.4:6
echo 1:2_3.4:5xx:6|cut -d : -f 2
>> 2_3.4
#从上面结果看出显示多个字段时中间还是有分割符,只取其中一个字段时没有分割符