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