BASH 字符串拆分

来源:互联网 发布:js的insertbefore参数 编辑:程序博客网 时间:2024/05/17 08:18
在bash编程中对字符串的拆分应用很普遍,下面介绍字符串拆分的方法:



一、目录名和文件名的拆分

获取目录名命令:

dirname 参数(文件名却绝对路径)

文件名:

basename  参数(文件名绝对路径)


例一:

basename /usr/local/share/doc/foo/foo.txt
foo.txt

dirname /usr/local/share/doc/foo/foo.txt
/usr/local/share/doc/foo

例二:
dirname /usr/local/share/doc/foo/
/usr/local/share/doc

basename /usr/local/share/doc/foo/
foo                                  # 最后的"/"被截去了

basename、dirname是最简单的字符串截取命令。




二、字符串任意截取算符

任意截取字符串需要用两个算符:"#"和"%","#"是截取前面字符串、"%"是截取后面的字符串,它们通常与前面的字符串连用

例一:截取前面的字符串

$ myfoo="afoaafoaaafoaaaa.tar.gz"

$ echo ${myfoo#*fo}
$aafoaaafoaaaa.tar.gz            # 将匹配"*fo"的最短字符串左边全部截去

$ echo ${myfoo##*fo}
$aaaa.tar.gz                     # 将匹配"*fo"的最长字符串左边全部截去



匹配过程:

a
af
afo                             # fo 第一次匹配
afoa
afoaa
afoaaf
afoaafo                         # fo 第二次匹配
afoaafoa
afoaafoaa
afoaafoaaa
afoaafoaaaf
afoaafoaaafo                    # fo 第三次匹配
afoaafoaaafoa
afoaafoaaafoaa
afoaafoaaafoaaa
afoaafoaaafoaaaa
...



例二、截取左边的字符串

$ myfoo="afoaafoaaafoaaaa.tar.gz"

$ echo ${myfoo%fo*}
$afoaafoaaa                      # 将匹配 "fo*" 的最短字符串右边全部截去

$ echo ${myfoo%%fo*}
$ a                             # 将匹配 "fo*" 的最长字符串右边全部截去


可见"*fo"是向左边匹配,与"#"结合使用,而"fo*"是向右边匹配,与"%"结合使用。




三、字符串:起点:偏移截取字符串

指定字符串:起点:偏移截取字符串更方便

例一:

$ myfoo=afoaafoaaafoaaaa.tar.gz

$ echo${myfoo:4:5}                  # 截取 ${myfoo} 中的第4个字符起,向右数5个字符
$ afoaa


字符的编号实际是字符串在内存中的存放位置,从 0 开始

a f o a a f o a a a f o a a a a . t a r . g z
0 1 2 3 4 5 6 7 8 9 ...




四、使用脚本举例:修改批量文件的后缀名

#####################################################

#!/bin/bash
# 用法 re_name.sh old_suffix new_suffix
# 目录信息,以及参数错误返回值

# 判断参数个数是否小于2,是则退出脚本返回错误值

ER_PAR=66

case $# in
       0|1)
       echo "Usage: `basename $0` old_file_suffix new_file_suffix"
       exit $ER_PAR
       ;;
esac

# 改名

filelist=`ls *.$1`

for filename in filelist

do
       mv ${filename} ${filename%$1}$2
done

exit 0

########################################################

[liuhaifeng01@tc tmp]$ bash re_name.sh gifjpg               ## 执行脚本
[liuhaifeng01@tc tmp]$ls                                    ## 查看已经改过来了
1.jpg  2.jpg 3.jpg  4.jpg   re_name.sh 

[liuhaifeng01@tc tmp]$ bash re_name.shgif                   ##如果就填写一个参数 会推出报错
Usage: re_name.sh old_file_suffix new_file_suffix


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 剧烈运动后肌肉酸痛怎么办 剧烈运动后吐了怎么办 长跑后头晕想吐怎么办 运动后一直想吐怎么办 跑多了恶心想吐怎么办 剧烈运动恶心想吐怎么办 长跑之后 恶心想吐怎么办 喝咖啡后绞心痛怎么办 牛奶喝多了胃胀怎么办 运动后大量出汗头晕怎么办 屁股出汗淹的特别痛怎么办 运动完感觉很累怎么办 跑步后感觉很累怎么办 输液多了伤脾胃怎么办 运动完后特别晕怎么办 运动过量大腿肌肉酸痛怎么办 13岁发烧38.2度怎么办 头晕恶心想吐四肢无力怎么办 烧退了浑身疼怎么办 下午睡久了头疼怎么办 一天睡久了头疼怎么办 在家躺久了头疼怎么办 4周多儿童睡眠差怎么办 6岁儿童睡眠差怎么办 四年级的孩子不会写作文怎么办 四年级的孩子写不出作文怎么办? 欠了三万网贷怎么办 打完篮球浑身疼怎么办 在部队当兵意外死亡了怎么办 派派没有体力瓶怎么办 e记账登录不上怎么办 洁净净化区湿度高怎么办 政府测量土地少算了面积怎么办 北京武警欠我钱怎么办 被小混混打了怎么办 农保地建房子怎么办 WOW7.3到8.0橙装怎么办 90后离婚有孩子怎么办 90后的我们该怎么办 越南和中国结婚怎么办结婚证 改革怎么看走留怎么办事业怎么干