2017-05-03 43 views
0

我一直在此寻找一段时间,似乎无法找到如何使用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再次执行相同的指令,直到第二个下划线?

+0

'sed的“S/[^ _ * _ [^ _] * _ //'' – Rob

回答

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#*_*_}" 
+0

我用这个方法!工作得很好...只需要弄清楚如何让我的脚本现在可以接受多个文件。 '回声 “请在此处拖动文件:” 读取文件名 路径= $(目录名称 “$ {文件名}”) 文件= $(名前缀 “$ {文件名}”) MV -i“$ PATH/$ file“”$ path/$ {file#* _ * _}“' –

+0

@DerekEdwards尝试'读取-a文件名;用于“$ {filenames [@]}”中的文件名;做...' –

+0

谢谢!这工作。你能解释一下这是干什么吗?!无论如何,我会仔细研究。 –

1

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

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

输出:

D594_242_25kd_kljd.mov 
相关问题