Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
脚本bash:从文件名中删除介于“0”和“0”之间的数字-&引用;及_&引用;_Bash_File Rename - Fatal编程技术网

脚本bash:从文件名中删除介于“0”和“0”之间的数字-&引用;及_&引用;

脚本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$)结尾,我想用“-”替换数字

我需要删除文件名中介于-和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$)结尾,我想用“-”替换数字


但这种方法不起作用

您的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选项,才能使
*()
模式工作

有关参数展开如何工作的更多信息,请参见或