第一种方法:利用键盘上#$%三个键之间的前后关系
${varible##*string} 从左向右截取最后一个string后的字符串
${varible#*string} 从左向右截取第一个string后的字符串
${varible%%string*} 从右向左截取最后一个string后的字符串
${varible%string*} 从右向左截取第一个string后的字符串
eg:
从末尾除去特定子字符串,不必使用"*"字符串
eg:
第二种方法:${varible:start:length}截取从下标start开始的length个字符串
eg:
得到字符串长度:echo ${#varible}
eg:
或者expr length "$varible"
实例:
运行之前,需要输入命令chmod 755 mystr_cut.sh生成可执行文件
${1##*.}——>$1是传给脚本的第一个命令行自变量,$2是传给脚本的第二个命令行自变量,以此类推
第三种方法:运用工具cut
cut命令用于从文件或标准输入中读取内容并截取每一行的特定部分,发送到标准输出
截取方式:
1.按字符位置
2.按字节位置
3.使用一个分隔符将一行分割成多个field,并提取指定的fields
cut命令有5个参数(-c,-b,-f,-d,-s)
截取方式:
-c:character
-b:byte
-f:field(需用 -d 参数指定一个分隔符,分隔符只能为单个字符)
-s:suppress,表示如果行中没有给出的分隔符,则不输出该行
注:默认为如果没有分隔符则将该行原封不动输出
eg:
1.
-c 实例
截取字符串中从第21到37的字符
2.
-f 实例
截取以空格为分隔符的第三部分
截取以空格为分隔符的第3到6部分
截取以 , (逗号)为分隔符的第2部分
截取以 , (逗号)为分隔符的第2部分之后的字符串
分隔符为 ? ,因为给出的字符串中没有,所以原样输出
3.
-s实例
字符串中没有给出的分隔符,则不输出。与上面第2.的第三个截图相对比
字符串中有 " " (空格)这个分隔符,则输出符合要求的字符