如何删除文件名中的字符,包括第二个下划线

时间:2017-05-03 23:08:43

标签: macos unix sed rename file-rename

我一直在寻找一段时间,似乎无法找到如何使用sed来做到这一点的解决方案。我有一个名为的文件:

FILE_772829345_D594_242_25kd_kljd.mov

我想要重命名

D594_242_25kd_kljd.mov

我目前一直试图让sed为此工作,但只能删除文件的第一秒:

echo 'FILE_772829345_D594_242_25kd_kljd.mov' | sed 's/[^_]*//'
_772829345_D594_242_25kd_kljd.mov

我怎样才能再次使用相同的指令,直到第二个下划线?

2 个答案:

答案 0 :(得分:1)

如果所有文件的名称相似,则可以使用cut,这比使用正则表达式的sed要简单得多:

cut -f3- -d_ <<< "FILE_772829345_D594_242_25kd_kljd.mov"

输出:

D594_242_25kd_kljd.mov

答案 1 :(得分:1)

如果文件名在shell变量中,您甚至不需要使用sed,只需使用shell expansion with #修剪第二个下划线:

filename="FILE_772829345_D594_242_25kd_kljd.mov"
echo "${filename#*_*_}"    # prints "D594_242_25kd_kljd.mov"

顺便说一句,如果您要使用mv重命名该文件,请使用其-i选项,以避免在存在任何名称冲突时覆盖文件:

mv -i "$filename" "${filename#*_*_}"