脚本bash:从文件名中删除介于“0”和“0”之间的数字-&引用;及_&引用;
我需要删除文件名中介于-和x之间的序列号(下划线也应删除) 原始文件名:脚本bash:从文件名中删除介于“0”和“0”之间的数字-&引用;及_&引用;,bash,file-rename,Bash,File Rename,我需要删除文件名中介于-和x之间的序列号(下划线也应删除) 原始文件名:20190815-12345_table_file.rar 应为:20190815-table_file.rar 我的bash代码: for f in ./*.rar; do fn=`echo $f|sed 's/^-[0-9].*_$/-/g'`; mv "$f" "$fn"; done; 我尝试了类似的方法,因为我知道我的数字以“-”(so^)开头,是数字([0-9].*),以“\”(so$)结尾,我想用“-”替换数字
20190815-12345_table_file.rar
应为:20190815-table_file.rar
我的bash代码:
for f in ./*.rar;
do fn=`echo $f|sed 's/^-[0-9].*_$/-/g'`;
mv "$f" "$fn";
done;
我尝试了类似的方法,因为我知道我的数字以“-”(so^)开头,是数字([0-9].*),以“\”(so$)结尾,我想用“-”替换数字
但这种方法不起作用 您的sed正则表达式与您想要的方式不匹配:开始和结束分隔符是一行的开始和结束的锚定符。另外,您希望
[0-9]*
不带任何数字量的点
请尝试以下方法:
for f in ./*.rar; do
fn="$( sed 's/-[0-9]*_/-/g' <<<"$f" )"
mv "$f" "$fn"
done
用于f英寸/*.rar;做
fn=“$(sed's/-[0-9]*./-/g'一个全Bash解决方案是:
for f in ./*.rar; do
mv "$f" "${f/-*([0-9])_/-}"
done
必须使用shopt-s extglob
启用extglob
shell选项,才能使*()
模式工作
有关参数展开如何工作的更多信息,请参见或