shell 中字符串变量处理

1. 字符串内容替换

${变量#关键字}从头开始,将匹配到的最短子串删除 (第一个匹配到的子串删除)删除第1个分隔符及其之前的内容
${变量##关键字}从头开始,将匹配到的最长子串删除     删除最后1个分隔符及其之前的内容
${变量%关键字}从尾开始,将匹配到的最短子串删除
${变量%%关键字}从尾开始,将匹配到的最长子串删除
${变量/旧字符串/新字符串}替换掉第一个匹配到的旧字符串
${变量//旧字符串/新字符串}替换掉所有匹配到的旧字符串

待处理变量:   aa='/aa/bb/aa/cc'

# 从前往后找到/后第一个/,/及其前面的字符全部删除
echo ${aa#/*/}   # 最后一个/是分隔符,第一个/代表从其开始,通配符*代表0到无穷多个任意字符
# bb/aa/cc
# 从前往后找到/后最后一个/,/及其前面的字符全部删除
echo ${aa##/*/}
# cc
# 从后往前找到第一个/,/及其后面的字符全部删除
echo ${aa%/*}   
# /aa/bb/aa
# 从后往前找到最后一个/,/及其后面的字符全部删除
echo ${aa%%/*}
# 空

# 从前往后将第一个aa替换成AA
echo ${aa/aa/AA}
# /AA/bb/aa/cc
# 从前往后将全部aa替换成AA
echo ${aa//aa/AA}
# /AA/bb/AA/cc

2. 字符串截取

待处理字符串:   aa='http://www.baidu.com/123.htm'

1. # 号截取,删除左边字符,保留右边字符。

echo ${aa#*//}
# http://www.baidu.com/123.htm

其中 aa 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符

2. ## 号截取,删除左边字符,保留右边字符。

echo ${aa##*/}

http://www.baidu.com/123.htm

##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符

3. %号截取,删除右边字符,保留左边字符

echo ${aa%/*}

http://www.baidu.com/123.htm

%/* 表示从右边开始,删除第一个 / 号及右边的字符

4. %% 号截取,删除右边字符,保留左边字符

echo ${aa%%/*}

http://www.baidu.com/123.htm

%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符

5. 从左边第几个字符开始,指定长度后的删除

echo ${aa:0:5}

http://www.baidu.com/123.htm

其中的 0 表示左边第一个字符开始,5 表示字符的总个数。

6. 从左边第几个字符开始,一直到结束。

echo ${aa:7}

http://www.baidu.com/123.htm

其中的 7 表示左边第8个字符开始,一直到结束保留。

7. 从右边第几个字符开始,及字符的个数

echo ${var:0-7:3}

http://www.baidu.com/123.htm

其中的 0-7 表示右边算起第七个字符开始,长度为3的子串保留。
结果是:123

8. 从右边第几个字符开始,一直到结束。

echo ${var:0-7}

http://www.baidu.com/123.htm

表示从右边第七个字符开始,一直到结束。

注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)

3. 变量的测试与内容替换

str: 代表str没设置或为空字符串;str仅表示没有该表量

           变量设置方式                str没有设置                str为空字符串           str已设置且非空字符串
         var=${str-expr}                var=expr                var=           var=$str
         var=${str:-expr}                var=expr                var=expr           var=$str
         var=${str+expr}                var=                var=expr           var=expr
         var=${str:+expr}                var=                var=           var=expr
         var=${str=expr}       str=expr     var=expr                str=不变     var=           str=不变     var=$str
         var=${str:=expr}       str=expr     var=expr                str=expr     var=expr           str=不变     var=$str
         var=${str?expr}       expr输出至stderr                var=           var=str
         var=${str:?expr}       expr输出至stderr                expr输出至stderr           var=str

实例

# 若变量aa不存在,则返回“11”
aa=${aa-11}
# 变量aa不存在或为空字符串,均返回“11”
aa=${aa:-11}

4. 获取字符串(变量)长度

aa='abc'
# 1.利用wc的-L参数来获取字符串的长度
echo ${aa} | wc -L

# 2. 利用awk的length方法
echo ${aa} | awk '{print length($0)}'

# 3.利用awk的NF项来获取字符串长度
echo ${aa} | awk -F '' '{print NF}'
备注: -F为分隔符,NF为域的个数,即单行字符串的长度

# 4. 利用${#str}来获取字符串的长度
echo ${#aa}
备注:  $# 代表后接的参数个数

# 5.利用wc的-c参数,结合echo -n参数
echo -n ${aa} | wc -c
备注:  1) -c参数: 统计字符的个数
      2) -n参数: 去除"\n"换行符,不去除的话,默认带换行符,字符个数就成了4

# 6.利用expr的length方法
expr length ${aa}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值