Linux: shell拆分浮点数的整数和小数部分 && 拆分文件的文件名和扩展名
来源:互联网 发布:磁条卡写卡软件 编辑:程序博客网 时间:2024/06/05 04:33
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
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 filescount=1# maxdepth参数尽量靠前是一个很好的习惯,可以避免find深度查找for oldName in `find /tmp -maxdepth 1 -iname '*.png' -o -iname '*.jpg' -type f`donewName=image-$count.${oldName##*.}mv $oldName $newNamelet 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
阅读全文
0 0
- Linux: shell拆分浮点数的整数和小数部分 && 拆分文件的文件名和扩展名
- 浮点数整数部分和小数部分的分离
- Java Application浮点数 --整数--小数--拆分
- java 练习题 得到浮点数的整数部分和小数部分
- 第7节项目2-分离浮点数的整数和小数部分
- 分离浮点数的整型部分和小数部分
- 接受用户输入的一个浮点数,把它的整数部分和小数部分分别输出
- 将一个浮点数的整数部分和小数部分分别输出显示,java显示(1H)
- 37 java java将一个浮点型数据的整数部分和小数部分分别输出
- 整数按和拆分
- 整数合并和拆分
- 表的垂直拆分和水平拆分
- 表的垂直拆分和水平拆分
- mysql的水平拆分和垂直拆分
- 表的垂直拆分和水平拆分
- 数据库的水平拆分和垂直拆分
- 表的垂直拆分和水平拆分
- mysql的水平拆分和垂直拆分
- Android include注意事项
- windows下安装运行rabbitMQ并结合spring框架进行收发消息
- 【POJ】3579
- Python网络爬虫与信息提取-Day8-基于bs4库的HTML格式输出
- Redis存储list对象
- Linux: shell拆分浮点数的整数和小数部分 && 拆分文件的文件名和扩展名
- 什么是Java语言?
- 移动端弱网测试及Chrome前端调试
- 为什么我们要使用Async、Await关键字
- 实用类
- Dying[二分]
- HDU5873Football Games(思维题)
- LNMP1.2及之后版本–添加、删除虚拟主机教程
- adapter基类的封装