我一直在寻找一段时间,似乎无法找到如何使用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
我怎样才能再次使用相同的指令,直到第二个下划线?
答案 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#*_*_}"