1.Linux shell 截取字符变量的前8位
实现方法有如下几种:
- expr substr “$a” 1 8
- echo $a|awk ‘{print substr(,1,8)}’
- echo $a|cut -c1-8
- echo $
- expr $a : ‘\(.\\).*’
- echo $a|dd bs=1 count=8 2>/dev/null
2.按指定的字符串截取
(1)第一种方法:
从左向右截取最后一个string后的字符串
${varible##*string}
从左向右截取第一个string后的字符串
${varible#*string}
从右向左截取最后一个string后的字符串
${varible%%string*}
从右向左截取第一个string后的字符串
${varible%string*}
“*”只是一个通配符可以不要
请看下面的例子:
$ MYVAR=foodforthought.jpg $ echo ${MYVAR##*fo} rthought.jpg $ echo ${MYVAR#*fo} odforthought.jpg
(2)第二种方法:
${varible:n1:n2}:截取变量varible从n1开始的n2个字符,组成一个子字符串。可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
$ EXCLAIM=cowabunga $ echo ${EXCLAIM:0:3} cow $ echo ${EXCLAIM:3:7} abunga
这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。
3.按照指定要求分割:
比如获取后缀名
ls -al | cut -d “.” -f2
小结:shell对应字符串的处理方法很多,根据需求灵活选择。
在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快。
一 语法
1
2
3
4
|
cut [选项] 文件名 选项: -f 列号:提取第几列 -d 分隔符:按照指定分隔符分割列 |
[[ $name =~ xx ]];then
xx
【#】代表 root权限
【$】代表普通用户
[email protected]:表示所有脚本参数的内容
$#:表示返回所有脚本参数的个数。
$# 是传给脚本的参数个数
$
0
是脚本本身的名字
$
1
是传递给该shell脚本的第一个参数
$
2
是传递给该shell脚本的第二个参数
[email protected] 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过
9
个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,
0
表示没有错误,其他表示有错误
示例:编写如下shell脚本,保存为test.sh
#!/bin/sh
echo "number:$#"
echo "argume:[email protected]"
执行脚本:
./test.sh first_arg second_arg
一、判断读取字符串值
表达式 含义
${var}
变量var的值, 与$var相同
${var-DEFAULT}
如果var没有被声明, 那么就以$DEFAULT作为其值 *
${var:-DEFAULT}
如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
${var=DEFAULT}
如果var没有被声明, 那么就以$DEFAULT作为其值 *
${var:=DEFAULT}
如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值 *
${var+OTHER}
如果var声明了, 那么其值就是$OTHER, 否则就为null字符串
${var:+OTHER}
如果var被设置了, 那么其值就是$OTHER, 否则就为null字符串
${var?ERR_MSG}
如果var没被声明, 那么就打印$ERR_MSG *
${var:?ERR_MSG}
如果var没被设置, 那么就打印$ERR_MSG *
${!varprefix*}
匹配之前所有以varprefix开头进行声明的变量
${[email protected]}
匹配之前所有以varprefix开头进行声明的变量
加入了“*” 不是意思是: 当然, 如果变量var已经被设置的话, 那么其值就是$var.
二、字符串操作(长度,读取,替换)
表达式 含义
${#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/substring/replacement}
使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement}
使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement}
如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement}
如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
说明:"* $substring”可以是一个正则表达式.