【问题标题】:Rename command with regular expression not working使用正则表达式重命名命令不起作用
【发布时间】:2015-06-08 09:11:09
【问题描述】:

我想使用正则表达式重命名文件。

例如:使用以下命令将文件N_Mod10_m.bdfN_Mod11_n.bdf 中的模式Mod[0-9][0-9] 替换为Mod[0-9][0-9]_temp

rename 's/\(.*Mod[0-9][0-9]\)\(.*\.bdf\)/$1_temp$2 *

但这不起作用。

【问题讨论】:

  • 您在rename 命令中缺少结束'
  • 另外,如果你在做$1_temp,bash 会寻找变量1_temp。说,$1 + _temp,说${1}_temp
  • 你需要使用非贪婪模式:(.*?),我猜,这就是你要找的:rename 's/(.*?Mod[0-9][0-9])(.*?\.bdf)/$1_temp$2' *。看看cyberciti.biz/tips/…unix.stackexchange.com/questions/19807/…

标签: regex linux rename


【解决方案1】:

您需要使用非贪婪模式:(.*?)。另外,添加缺少的报价'

我猜,这就是你要找的东西:rename 's/(.*?Mod[0-9][0-9])(.*?\.bdf)/$1_temp$2' *

看看Rename Multiple Files in a Shell PromptRenaming files to have lower case extensions with rename

对于 CentOS,您可以将 _temp 插入到文件名中,如下所示:

for i in *; do j=`echo $i | sed -r 's/(.*?Mod[0-9][0-9])(.*?\.bdf)/\1_temp\2/g'`; mv "$i" "$j"; done

【讨论】:

  • 这不起作用。即使是简单的替换也不起作用,例如使用命令 rename 's/xyz/xya/' * 将 xyz_d.txt 重命名为 xya_d.txt 但另一种方法是重命名 xyz xya * 是有效的。
  • 也许rename 's/(.*?Mod[0-9][0-9])(.*?\.bdf)\$1_temp$2//' * 对你有用? (改编自serverfault.com/questions/5685/…)。另外,请参阅那里的评论:“在 Arch Linux 上,这是 perl-rename”。你的是 Arch Linux 吗?
  • 请试试我的更新。如果仍然不起作用,请尝试转义圆括号和反斜杠: for i in *;做 j=`回声 $i | sed 's/\(.*?Mod[0-9][0-9]\)\(.*?\\.bdf)/\1_temp\2/g'`; mv "$i" "$j";完成.
猜你喜欢
  • 2017-10-31
  • 2019-06-12
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
相关资源
最近更新 更多