Remove underscore before extension in strings
我有像
如何编写一个bash函数来测试点扩展前的最后一个字符是否以下划线开头,并将下划线替换为
我已经完成了这个解决方案,但我正在寻找一种更优雅的方式,它也检查文件是否确实有下划线,如果名称已经正确则跳过它。
1 | for file in `ls *_.*`;do ext="${file##*.}"; filename="${file%.*}";non=${file::-5}; mv ${file} ${non}.${ext};done |
试试这个:
1 2 3 4 5 6 7 8 9 | #!/bin/bash filename=tran_crossings_exp_.txt i=${filename:${#filename}-5:1} // Take the 5th char from back if [ $i ="_" ]; then // If it is an underscore echo"${filename/?./.}" // Replace '?.' with just '.', this removes last '_' in this case (? means any character) else echo $filename fi |
在这里你可以测试它
注意:这仅适用于
编辑
存储在同一个变量中
1 2 3 4 5 6 7 8 9 10 | #!/bin/bash filename=tran_crossings_exp_.txt i=${filename:${#filename}-5:1} if [ $i ="_" ]; then filename="$(echo ${filename/?./.})" fi echo"$filename" |