一个计算机技术爱好者与学习者

0%

批量重命名和批量替换字符串

1. 前言

完成了《Hexo添加categories页面》,接下里的工作,就是给以前写的文章进行重新分类。以前分为五大类:设计开发、点滴发现、生活札记、精华转载和读者集萃。现在打算分成四大类:随笔(essay)、专业(dev)、英语(en)和爱好(hobby),然后在每个大类下再按需要细分为小类。

分类需要修改md文件的文件名和文件内容,面对近五百篇文章,必须要批量处理。

2. 批量修改文件名

假设要把所有以“disc-”开头的文件改为“dev-”开头,那么在linux下执行命令:

1
2
3
4
5
6
7
8
9
# macos
brew install rename
rename 's/disc-/dev-/' *

# ubuntu
rename 's/disc-/dev-/' *

# centos
rename disc- dev- *

3. 批量修改文件内容

1、假设我们要把文件中的“设计开发”改为“专业”,那么执行命令:

1
sed -i "s/设计开发/专业/g" `grep 设计开发 -rl .`

2、假设我们要把文件中的http://7oxjrx.com1.z0.glb.clouddn.com改为http://cdn.voidking.com,那么执行命令:

1
2
3
sed -i "s/http:\/\/7oxjrx.com1.z0.glb.clouddn.com/http:\/\/cdn.voidking.com/g" `grep http:\/\/7oxjrx.com1.z0.glb.clouddn.com -rl .`
# 或者
sed -i 's!http://7oxjrx.com1.z0.glb.clouddn.com!http://cdn.voidking.com!g' `grep http:\/\/7oxjrx.com1.z0.glb.clouddn.com -rl .`

3、假设我们要把文件中的https://www.voidking.com/2018/06/11/dev-hexo-categories/改为https://www.voidking.com/dev-hexo-categories/,这个就比较难了,可以先进行调试:

1
2
3
4
5
grep -P '\d{4}\/\d{2}\/\d{2}\/' -rl .

echo "https://www.voidking.com/2018/06/11/dev-hexo-categories/" | sed "s/\d{4}\/\d{2}\/\d{2}\///g"

echo "https://www.voidking.com/2018/06/11/dev-hexo-categories/" | sed "s/\([0-9][0-9][0-9][0-9]\)\/\([0-9][0-9]\)\/\([0-9][0-9]\)\///g"

因为grep和sed都不支持完全的正则表达式,所以grep要加P参数,sed要改写正则表达式。最后得到的命令为:

1
sed -i "s/\([0-9][0-9][0-9][0-9]\)\/\([0-9][0-9]\)\/\([0-9][0-9]\)\///g" `grep -P '\d{4}\/\d{2}\/\d{2}\/' -rl .`

4、假设我们想要把 [engineering,devops] 替换成 [专业,开发,nginx],那么执行命令(请使用linux而不是mac):

1
sed -i "s/专业,开发,nginx/engineering,devops/g" `grep '专业,开发,nginx' -rl .`