第一种方法:#%*,#即截取变量前的字符(左向右截取),%表示截取后面字符(右向左截取),*匹配符
var=foodforthought.jpg
${varible##*string} 从左向右截取最后一个string后的字符串
运行:echo ${var##*fo}
结果:rthought.jpg
${varible#*string}从左向右截取第一个string后的字符串
运行:echo ${var#*fo}
结果:odforthought.jpg
${varible%%string*}从右向左截取最后一个string后的字符串
运行:echo ${var%%fo*}
结果:
${varible%string*}从右向左截取第一个string后的字符串
运行:echo ${var%fo*}
结果:food
"*"只是一个通配符可以不要
第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
var=cowabunga
运行:echo ${var:0:3}
结果:cow
运行:echo ${var:3:7}
结果:abunga
mytar.sh -- 一个简单的脚本
应用:[ "${1##*.}" = "tar" ]&&echo "your input is tar file"||echo "your input is not tar file"
第三种方法:awk -F 分割符号
var=account.jpg
运行:echo $var|awk -F"." '{print $2}'
结果:jpg
运行:echo $var|awk '{print substr($0,1,7)}'
结果:account
第四种方法:利用cut
echo $a|cut -b2-8
cut:对标准输入的字符串进行处理
cut -bn-m:以byte为单位,从第n个byte开始,取m个
cut -bn,m:以byte为单位,截取第n,m个byte
cut -b-n,m:以byte为单位,截取1-n,和第m个
-c:以charactor为单位
-d:指定分隔符,默认为tab
-s:使标准输入中没有delimeter
cut -f1:截取第1个域
var="-rw-r--r-- 1 root root 1 Aug 23 01:00 file"
运行:echo $var|cut -d" " -f2-4
结果:1 root root
# 删除扩展名
运行:echo "account.doc"|sed 's/\..*//g'
结果:account
# 删除文件名
运行:echo "account.doc"|sed 's/.*\.//g'
结果:.doc
运行:ed -s file <
/somedomain/s/somedomain/newdomain/g
w
q
EOF
结果:file文件中的somedomain将被newdomain全局替换
阅读(2487) | 评论(0) | 转发(2) |