我的目录中有一组文件,如下所示,我想在最后一个下划线出现后删除该字符串。每次的字符串可能不同。如果能用它来做就好了sed
。
输入文件:
com_101_00000_0001_a234.txt
com_101_retail_00000_0002_g345.ctl
com_101_lines_003_0002_1134.txt
结果文件名:
com_101_00000_0001.txt
com_101_retail_00000_0002.ctl
com_101_lines_00003_0002.txt
答案1
如果您的系统有 perl rename
,您可以执行以下操作:
rename -n 's/_[^_]+?\././' *
如果您的文件最终可能具有相同的名称,为避免覆盖它们,请使用-i
:
rename -in 's/_[^_]+?\././' *
如果这符合您的预期,请删除-n
来实际重命名文件。
如果你真的坚持硬塞sed
进去,你可以做一些不必要的复杂的事情,如下所示:
for f in *_*.*; do
new=$(printf "%s\n" "$f" | sed 's/\(.*\)_[^_]*\(\.[^_]*\)$/\1\2/')
echo mv "$f" "$new"
done
或者,如果没有sed
,则更理智:
for f in *_*.*; do echo mv "$f" "${f%_*}.${f##*.}" ; done
对于最后两个示例,如果它们符合您的预期,请删除echo
来实际重命名文件。