如何删除文件名中直到并包括第二个下划线的字符
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#*_*_}"
我已经为此四处寻找了一段时间,但似乎找不到关于如何使用 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#*_*_}"