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

How to remove characters in filename up to and including second underscore

我已经为此四处寻找了一段时间,但似乎找不到关于如何使用 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

如何让 sed 再次执行相同的指令,直到第二个下划线?

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

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

输出:

D594_242_25kd_kljd.mov

如果文件名在shell变量中,你甚至不需要使用sed,只需要通过第二个下划线使用shell expansion with #到trim :

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

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

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