sed - 如何在sed中替换字符串中最右边的字符?

标签 sed

我有一个像这样的目录字符串:

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/

相关文章:

linux - 使用sed提取匹配输出?

linux - 如何在 Linux 中从 HTTP MIME 编码消息中提取文件数据?

ruby - 使用 rbenv 安装最新稳定版本的 Ruby

regex - 打印文件中pattern1和pattern2之间的数据,而不打印pattern2

perl - 使用单行命令删除多行模式

bash - 使用 bash 在文件的每一行中添加方括号

linux - 在特定 ID 之前插入一行并重新枚举 ID 列

macos - 查找并替换为 sed 和 regex

linux - 一个 Shell 脚本来模拟 wc 命令及其选项?

bash - 使用 sed 处理 html 数据