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

前言

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

分类

分类需要修改md文件的文件名和文件内容,面对近五百篇文章,我表示想要放弃。不过,作为一名极客,肯定还是有偷懒的办法的。

批量修改文件名

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

1
rename 's/disc-/dev-/' *

批量修改文件内容

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

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

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

1
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 .`

后记

这个分类过程,花费了很多时间,不过还是值得的。以上分类,看起来就合理了很多。

0%