Linux: shell拆分浮点数的整数和小数部分 && 拆分文件的文件名和扩展名
2017-08-26 14:15
507 查看
Linux: shell拆分浮点数的整数和小数部分 && 拆分文件的文件名和扩展名
目地:分别获取一个浮点数的整数和小数部分,或者将一个文件的文件名和扩展名拆分开。
可以考虑使用cut或者awk
cut
qingsong@db2a:/tmp$ num1=3.1415
qingsong@db2a:/tmp$ echo $num1 | cut -d '.' -f1
3
qingsong@db2a:/tmp$ echo $num1 | cut -d '.' -f2
1415
awk
qingsong@db2a:/tmp$ echo $num1 | awk -F '.' '{print $1}'
3
qingsong@db2a:/tmp$ echo $num1 | awk -F '.' '{print $2}'
1415
还有一种办法,更加高效和洁简,借助%操作符可以轻松将名称部分从“名称.扩展名”这种格式中提取出来
qingsong@db2a:/tmp$ echo ${num1%.*}
3
qingsong@db2a:/tmp$ echo ${num1#*.}
1415
${VAR%.*} 的含义:
从$VAR中删除位于 % 右侧的通配符(在前例中是.*)所匹配的字符串。通配符从右向左进行匹配。
${VAR%%.*} 的含义:
从$VAR中删除位于 % 右侧的通配符(在前例中是.*)所匹配的字符串。通配符从右向左进行贪婪匹配(尽可能多的匹配)。
${VAR#*.} 的含义:
从$VAR中删除位于 # 右侧的通配符(在前例中是*.)所匹配的字符串。通配符从左向右进行匹配
${VAR##*.} 的含义:
从$VAR中删除位于 # 右侧的通配符(在前例中是*.)所匹配的字符串。通配符从左向右进行贪婪匹配(尽可能多的匹配)。
示例:
qingsong@db2a:/tmp$ url=www.ibm.com
qingsong@db2a:/tmp$ echo ${url%.*}
www.ibm
qingsong@db2a:/tmp$ echo ${url%%.*}
www
qingsong@db2a:/tmp$ echo ${url#*.}
ibm.com
qingsong@db2a:/tmp$ echo ${url##*.}
com
即然能很容易地拆分了,就容易写一个脚本,来批量重命名文件(不考虑文件名有空格的情形)。下面的脚本可以批量重命名所有的 jpg、png文件
#!/bin/bash
#filename: batchrename.sh
#Rename jpg and png files
count=1
# maxdepth参数尽量靠前是一个很好的习惯,可以避免find深度查找
for oldName in `find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f`
do
newName=image-$count.${oldName##*.}
mv $oldName $newName
let count++
done运行效果如下:
qingsong@db2a:/tmp$ find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f
/tmp/MyBG1a.jpg
/tmp/V1uBkW4.jpg
/tmp/XXxxzyFr.png
/tmp/A8hB3An8ey.png
/tmp/XXxxeb5t.PNG
qingsong@db2a:/tmp$ bash rename.sh
qingsong@db2a:/tmp$ find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f
/tmp/image-5.PNG
/tmp/image-1.jpg
/tmp/image-2.jpg
/tmp/image-4.png
/tmp/image-3.png
目地:分别获取一个浮点数的整数和小数部分,或者将一个文件的文件名和扩展名拆分开。
可以考虑使用cut或者awk
cut
qingsong@db2a:/tmp$ num1=3.1415
qingsong@db2a:/tmp$ echo $num1 | cut -d '.' -f1
3
qingsong@db2a:/tmp$ echo $num1 | cut -d '.' -f2
1415
awk
qingsong@db2a:/tmp$ echo $num1 | awk -F '.' '{print $1}'
3
qingsong@db2a:/tmp$ echo $num1 | awk -F '.' '{print $2}'
1415
还有一种办法,更加高效和洁简,借助%操作符可以轻松将名称部分从“名称.扩展名”这种格式中提取出来
qingsong@db2a:/tmp$ echo ${num1%.*}
3
qingsong@db2a:/tmp$ echo ${num1#*.}
1415
${VAR%.*} 的含义:
从$VAR中删除位于 % 右侧的通配符(在前例中是.*)所匹配的字符串。通配符从右向左进行匹配。
${VAR%%.*} 的含义:
从$VAR中删除位于 % 右侧的通配符(在前例中是.*)所匹配的字符串。通配符从右向左进行贪婪匹配(尽可能多的匹配)。
${VAR#*.} 的含义:
从$VAR中删除位于 # 右侧的通配符(在前例中是*.)所匹配的字符串。通配符从左向右进行匹配
${VAR##*.} 的含义:
从$VAR中删除位于 # 右侧的通配符(在前例中是*.)所匹配的字符串。通配符从左向右进行贪婪匹配(尽可能多的匹配)。
示例:
qingsong@db2a:/tmp$ url=www.ibm.com
qingsong@db2a:/tmp$ echo ${url%.*}
www.ibm
qingsong@db2a:/tmp$ echo ${url%%.*}
www
qingsong@db2a:/tmp$ echo ${url#*.}
ibm.com
qingsong@db2a:/tmp$ echo ${url##*.}
com
即然能很容易地拆分了,就容易写一个脚本,来批量重命名文件(不考虑文件名有空格的情形)。下面的脚本可以批量重命名所有的 jpg、png文件
#!/bin/bash
#filename: batchrename.sh
#Rename jpg and png files
count=1
# maxdepth参数尽量靠前是一个很好的习惯,可以避免find深度查找
for oldName in `find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f`
do
newName=image-$count.${oldName##*.}
mv $oldName $newName
let count++
done运行效果如下:
qingsong@db2a:/tmp$ find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f
/tmp/MyBG1a.jpg
/tmp/V1uBkW4.jpg
/tmp/XXxxzyFr.png
/tmp/A8hB3An8ey.png
/tmp/XXxxeb5t.PNG
qingsong@db2a:/tmp$ bash rename.sh
qingsong@db2a:/tmp$ find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f
/tmp/image-5.PNG
/tmp/image-1.jpg
/tmp/image-2.jpg
/tmp/image-4.png
/tmp/image-3.png
相关文章推荐
- 将一个数拆分成整数部分和小数部分
- Linux 下当前可执行文件如何获取自身文件名与全路径<转>
- Unix&Linux大学教程:14 使用shell:初始化文件
- 在SQL中把一个浮点数的整数部分和小数部分分开
- Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第12章 正则表达式与文件格式化处理
- JAVA 浮点数转化为百分数,分离整数和小数部分 分类: Java 2015-08-04 18:11 10人阅读 评论(0) 收藏
- Linux下Shell输出重定向到空设备文件1>/dev/null 2>&1
- JAVA 输入一个浮点,分别输出整数部分和小数部分
- 接受用户输入的一个浮点数,把它的整数部分和小数部分分别输出
- Linux shell "此处需要整数表达式"
- 读入浮点数,将整数部分和小数部分分别输出
- Linux 切分文件名或文件扩展名
- JAVA 浮点数转化为百分数,分离整数和小数部分
- 将一个浮点数的整数部分和小数部分分别输出显示,java显示(1H)
- 递归练习之 给出任意浮点数, 找出将小数部分变为整数最小整数值
- Linux的4个主要部分:内核、Shell、文件结构和实用工具
- Linux的4个主要部分:内核、Shell、文件结构和实用工具
- Java Application浮点数 --整数--小数--拆分
- 输入一个浮点数,并输出该数的整数部分和小数部分
- IDE & 软件结构 & 下拉菜单带图片 & 调用shell脚本 & 读取JTree文件名 & 文件读写 & File&ImageUtil & 行号 & 高亮 & 字体 & 背景颜色