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



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

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

如果文件名在 shell 变量中,您甚至不需要使用sed,只需使用带有#的 shell 扩展来修剪第二个下划线:

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

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

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

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

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

输出:

D594_242_25kd_kljd.mov

最新更新