shell中字符串处理

1.删除字符串的子字符串

在处理文件的路径名的时候经常需要删除字符串的一部分,如在获得文件的路径名后只需要获取文件名本身,这时则需要删除路径中除文件名外的其它所有字符串。有时需要获得文件的父目录,这时则需要删除绝对路径名中的文件名和文件名前面的/,只留下包含父目录的字符串。

删除字符串的部分子字符串的语法说明
${str_var%pattern}删除字符串str_var中匹配模式的尽量少的最右边的子字符串
${str_var%%pattern}删除字符串str_var中匹配模式的尽量多的最右边的子字符串
${str_var#pattern}删除字符串str_var中匹配模式的尽量少的最左边的子字符串
${str_var##pattern}删除字符串str_var中匹配模式的尽量多的最左边的子字符串

删除最右边和最左边的子字符串示例:

str1='/u01/app/oracle/admin/oracle'
#删除字符串str1中匹配oracle的尽量少的最右边的子字符串
echo ${str1%/oracle}
/u01/app/oracle/admin
echo ${str1%/oracle*}
/u01/app/oracle/admin

#删除字符串str1中匹配oracle的尽量多的最右边的子字符串
echo ${str1%%/oracle}
/u01/app/oracle/admin
#使用oracle*来匹配/oracle/admin/oracle
echo ${str1%%/oracle*}
/u01/app

#删除字符串str2中匹配oracle的尽量少的最左边的子字符串
str2='/oracle/app/oracle'
echo ${str2#/oracle}
/app/oracle
echo ${str2#/oracle*}
/app/oracle

#删除字符串str2中匹配oracle的尽量多的最左边的子字符串
echo ${str2##/oracle}
/app/oracle
#由于尽量多的匹配左边的字符串/oracle*将整个字符串都匹配了,因此删除后只为空
echo ${str2##/oracle*}

获取路径中的文件名和文件名后缀:

str3='/u01/app/oracle/admin/orcl/scripts/orcl1.sql'

echo ${str3##*/}
orcl1.sql
#等价于basename命令的输出
echo $(basename $str3)
orcl1.sql

#获取文件名的后缀
echo ${str3##*.}
sql

#去掉文件名的后缀
echo ${str3%%.*}
/u01/app/oracle/admin/orcl/scripts/orcl1
获取文件的父目录:
str3='/u01/app/oracle/admin/orcl/scripts/orcl1.sql'
echo ${str3%/*}
/u01/app/oracle/admin/orcl/scripts
#等价于dirname的命令输出
echo $(dirname $str3)
/u01/app/oracle/admin/orcl/scripts

2.去除字符串前后的空白字符

当字符串前后含有空格或tab空白字符时,最简单的方法是将字符串赋值给一个变量,然后输出变量即可以去除字符串前后的空白字符。

str=`echo '   A   B   C    '`
echo $str
A B C

也可以使用awk的替换命令进行前后空白字符串的去除。

echo '   A   B   C    ' | awk '{gsub(/^[ ]+|[ ]+$/, "");print}'  
A   B   C

echo '   A   B   C    ' | awk '{gsub(/^\s+|\s+$/, "");print}'  
A   B   C

或者使用sed命令进行前后空白字符串的去除。

echo '   A   B   C    ' | sed -r 's/^[ \t]+(.*)[ \t]+$/\1/g'  
A   B   C   

echo '   A   B   C    ' | sed -r 's/^\s+(.*)\s+$/\1/g'  
A   B   C   

3.截取字符串特定位置的子字符串

在截取字符串特定位置开始的一部分子字符串时,如果起始位置左边开始计数,截取格式如下:
${string: start: length}

如果起始位置想从右边开始计数,截取格式如下:
${string: 0-start: length}

#从左边数起的第5个字符后开始
string='123456789'
echo ${string:5:4}
6789

#从右边数起的第5个字符后开始
${string:0-5:4}
5678
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值