批量修改目录内所有文件内容

有时候,我们希望把有些文件的特定内容替换成其他的,假如一个一个替换效率太低了,这个时候,我们可以借助强大的grep和sed 完成。

比如我有一些文件,我希望把其中的file.awen.me 这个url 替换成file.fangwenjun.com,首先,我们需要查找当前目录中包含这个域名的文件:

1
egrep -rn 'file\.awen\.me' *.md

如图所示

linux 修改

然后使用sed 替换

1
sed -i "s@file\.awen\.me@file\.fangwenjun\.com@g" `grep file\.awen\.me -rl ./`

最后我们验证下

1
2
ubuntu@ubuntu-xenial:/vagrant/_posts$ sed -i "s@file\.awen\.me@file\.fangwenjun\.com@g" `grep file\.awen\.me -rl ./`
ubuntu@ubuntu-xenial:/vagrant/_posts$ egrep -rn 'file\.awen\.me' *.md

发现使用file.awen.me 已经查找不到了,而使用file.fangwenjun.com 可以查到。

1
2
3
4
5
6
7
ubuntu@ubuntu-xenial:/vagrant/_posts$ egrep -rn 'file\.fangwenjun\.com' *.md
Ansible使用.md:178:![](https://file.fangwenjun.com/blog/2017-07-02-084417.jpg!awen)
Ansible使用.md:184:![](https://file.fangwenjun.com/blog/2017-07-02-084443.jpg!awen)
Ansible使用.md:188:![](https://file.fangwenjun.com/blog/2017-07-02-084502.jpg!awen)
ansible-学习笔记.md:215:![](https://file.fangwenjun.com/blog/2017-07-05-021104.jpg!awen)
ansible-学习笔记.md:366:![](https://file.fangwenjun.com/blog/2017-07-05-024050.jpg!awen)
Apache-服务.md:27:![](https://file.fangwenjun.com/2017-06-14-073228.jpg!awen)

mac 系统

mac 下 sed 替换 需要指定一个备份文件才可以。

1
sed -i "_bak" "s@tags: 心情@tags: 随笔@g" `grep 'tags: 心情' -rl ./`