批量重命名的三种方法:内置 + sed 或 rename + 正则表达式【Mac&Linux】

发布于:2022-12-06 ⋅ 阅读:(765) ⋅ 点赞:(0)

一、Mac内置功能

若仅是批量编号替换前缀后缀的基础需求,Mac下直接全选右键重命名即可,更进阶的重命名需求请看二、三。

二、直接 命令行(sed)

2.1. 查看是否符合修改预期

find . -maxdepth 1 -name '*.mp4' | while read filename; do newfilename=`echo $filename | sed 's/^.....//'`; echo mv $filename $newfilename; done

解释:
find . -maxdepth 1 -name '*.mp4' — 打印当前目录下所有mp4文件;
while read filename; do + done — 将对来自 find 的每一行进行循环操作(文件名保存在filename变量中);
's/^.....//' — 正则匹配前五个字符,用s命令替换; s/old/new/ old替换为new
echo mv $filename $newfilename 回显命令

2.2. 管道将向终端回显建议的命令

find . -maxdepth 1 -name '*.mp4' | while read filename; do newfilename=`echo $filename | sed 's/^.....//'`; echo mv $filename $newfilename; done | bash

三、借助 工具(rename)

3.1. 装rename

Mac系统:brew install rename
Debian系统:sudo apt-get install rename

3.2. rename [-v] [-n] [-f] perlexpr [filenames]

解释:
-v(verbose)打印被成功重命名的文件
-n(no-act)只显示将被重命名的文件,而非实际进行重命名操作
-f(force)覆盖已经存在的文件
perlexprPerl语言格式的正则表达式
files需要被替换的文件(比如*.c、*.h),如果没给出文件名,将从标准输入读

3.4. 替换Substitute

rename 's/Sam3/Stm32/' *.nc	# 1.将所有*.nc文件中Sam3替换成Stm32
rename 's/\.bak$//' *.bak	# 2.去掉文件后缀名(比如去掉.bak)
rename 's/[ ]+//g' *		# 3.去掉文件名的空格
rename 's/^/yes/' *			# 4.文件开头加入字符串(比如yes)
rename 's/$/yes/' *			# 5.文件末尾加入字符串(比如yes)
rename 'y/A-Z/a-z/' *		# 6.将文件名改为小写

3.5. 实践

~/Downloads/123 
✦ ❯ l
001 - 深度学习基础介绍 机器学习27 总结.mp4
002 - 深度学习基础介绍 机器学习26 Hierarchical clustering 层次聚类.mp4
003 - 深度学习基础介绍 机器学习25 Kmeans应用.mp4
004 - 深度学习基础介绍 机器学习24 Kmeans算法.mp4
005 - 深度学习基础介绍 机器学习23 回归中的相关性和R平方值应用.mp4
006 - 深度学习基础介绍 机器学习22 回归中的相关度和决定系数.mp4
~/Downloads/123 
✦ ❯ rename 's/[0-9]{3} - /' *
Substitution replacement not terminated at (eval 2) line 1.

~/Downloads/123 
✦ ❯ rename 's/[0-9]{3} - //' *

~/Downloads/123 
✦ ❯ l
深度学习基础介绍 机器学习22 回归中的相关度和决定系数.mp4
深度学习基础介绍 机器学习23 回归中的相关性和R平方值应用.mp4
深度学习基础介绍 机器学习24 Kmeans算法.mp4
深度学习基础介绍 机器学习25 Kmeans应用.mp4
深度学习基础介绍 机器学习26 Hierarchical clustering 层次聚类.mp4
深度学习基础介绍 机器学习27 总结.mp4

使用 sed 命令替换/删除 文本字符的 20 个例子

sed

sed 's/a//' file				#01. 删除指定的字符,比如 'a'
sed 's/^.//' file				#02. 移除每一行的第一个字符
sed 's/.$//' file				#03. 移除每一行的最后一个字符
sed 's/^.//;s/.$//' file		#04. 同时移除每一行的第一个字符和最后一个字符
sed 's/^F//' file				#05. 移除每一行的匹配到的第一个字符,如果没有匹配不做处理
sed 's/x$//' file				#06. 移除每一行的匹配到的最后一个字符,如果没有匹配不做处理
sed 's/...//' file				#07. 删除每一行的第一到第三个字符
sed -r 's/.{4}//' file			#08. 删除每一行的第一个到第 n 个字符
sed -r 's/.{3}$//' file			#09. 删除每一行的最后 n 个字符
sed -r 's/(.{3}).*/\1/' file	#10. 除了每一行的第一到第n个字符外,剩下的都要删除
sed -r 's/.*(.{3})/\1/' file	#11. 删除每一行所有字符且保留结尾的n个字符
sed 's/[aoe]//g' file			#12. 删除每一行匹配到的多个字符
sed 's/lari//g' file			#13. 删除匹配到的字符串
sed 's/u//# 2' file				#14. 删除每一行匹配到的第 n 个字符
sed 's/a.*//' file				#15. 删除每一行以某个字符开头的子字符串
sed 's/[0-9]//g' file			#16. 删除文件中每一行中出现的所有数字
sed 's/[a-z]//g' file			#17. 删除每一行中出现的小写字符
sed 's/[^a-z]//g' file			#18. 删除除了小写字符之外的其他所有字符
sed 's/[a-z][A-Z][0-9]//g' file	#19. 删除每一行所有的字母和数字字符
sed 's/[uU]//g'					#20. 删除每一行的一个字符,且忽略大小写

在这里插入图片描述

正则表达式去反:

^((?!你的正则表达式).)*
本文含有隐藏内容,请 开通VIP 后查看