regex - Shell 脚本(用于移动文件的正则表达式)

标签 regex shell

我有一个文件列表,例如:

i60.st082313ea.jpg
i61.st51249c5e.jpg
i62.stef1fe5f2.jpg

我想通过将起始整数(例如 60、61、62)减一来重命名目录中的每个文件。

我已经使用如下内容在 shell 中完成了 svn 重命名:

for file in *.xml;
    do svn mv $file `basename $file xml`json;
done;

但是当涉及到创建正则表达式并从文件的一部分中减去 1 时,我不知所措。值得一提的是,该文件可以在名称中的其他位置重复表达式 i[0-9]+,因此它只需匹配前导字符串。

任何帮助/教程/链接将不胜感激。

最佳答案

for file in *.jpg; do
    newfilename=`echo $file | awk -F '.' '{ OFS=".";print "i" substr($1,2,2)+1, $2, $3}'`
    mv $file $newfilename
done;

注意仅当文件名与您的示例匹配时才有效(例如整数位于第二个和第三个位置,并且文件恰好有两个 .)。

HTH

关于regex - Shell 脚本(用于移动文件的正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7074605/

相关文章:

linux - Monit 脚本无法重新启动服务

javascript - Jquery正则表达式搜索子字符串或通配符

PHP正则表达式匹配单词

python - 试图理解 pythonpath 变量

linux - FFmpeg-bash : ffmpeg: command not found

linux - 在 shell 脚本中复制一个变量 (Linux)

javascript - Express 使用无模式动态基本 URL 来呈现不同的页面

regex - 这是用于匹配 Excel 公式中任何单元格引用的正则表达式吗?

regex - 跨多列的条件总和

linux - 如何读取上一个命令的输出,然后继续执行下一个命令