我有一个像这样的目录字符串:
build_result/09_abc_WQVGA_FullTouch_15M.xyz
我想在最后一个 .
字符(以 _
为前缀)之前插入文件的日期,所以我像这样使用 sed:
newname=`echo $filename | sed -n 's/\./\_'"$date"'\./p'`
$date
在sed命令之前已经计算过了,结果是:
build_result/09_abc_WQVGA_FullTouch_15M_20120420.xyz
但有时会有一些文件名如:
build_result/09_abc_WQVGA_FullTouch_1.5M.xyz
在最后一个之前添加一个额外的 .
,sed 将在第一个 .
之前插入 $date
。如何让它只在最后一个 .
之前插入 $date
?
最佳答案
其他人已经涵盖了 sed
所以我建议使用您的 shell 的功能来做到这一点。
更少的开销(产生子壳......)!
$ file='build_result/09_abc_WQVGA_FullTouch_15M.xyz'
$ newfile="${file%.*}_$date.${file##*.}"
$ echo "$newfile"
build_result/09_abc_WQVGA_FullTouch_15M_20120420.xyz
使用 sed
我会这样做:
sed "s/\(.*[^.]\)\./\1_$date./g"
关于sed - 如何在sed中替换字符串中最右边的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247543/