本文
主要对日常shell脚本使用中的一些技巧进行记录。
背景
- 主机: Thinkpad S2
- 系统: Deepin GNU/Linux 15.11
- 内核: Debian 6.3.0-18+deb9u1
- shell:bash
字符串替换的小技巧
在一个文件里替换一个字符串
1
|
sed -e s/OLDSTRING/NEWSTRING/g src_file >tempfile
|
1
|
sed -i -e s/OLDSTRING/NEWSTRING/g src_file
|
在一个文件里进行有条件替换
我们经常有这样的需求,对某个文件中某些参数值进行修改,比如将TRUE改为FALSE,而且有些参数的keyword可能由多个单词构成(中间空格分离)。shell中for循环的默认分隔符是:空格、tab、\n,,根据需求选择只将\n作为分隔符(原分隔符暂存,处理完后恢复,为的是不影响后面的脚本运行)(for语句中的shell命令用反引号包起来)
1
2
3
4
5
6
7
8
9
10
|
#!/bin/bash
IFS_OLD=$IFS
IFS=$'\n'
for key in `cat keywords`;
do
sed -i "/${key}/s/TRUE/FALSE/g" src_file
done
IFS=$IFS_OLD
|
在一组文件里替换一个字符串
1
2
3
4
|
for file in `cat flist`
do
sed -i -e s/OLDSTRING/NEWSTRING/g ${file}
done
|
在一个文件里替换一组字符串
1
2
3
4
|
sed -i -e s/OLDSTRING1/NEWSTRING1/g \
-e s/OLDSTRING2/NEWSTRING2/g \
-e s/OLDSTRING3/NEWSTRING3/g \
src_file
|
更多无耻要求
更多无耻要求可以基于以上简单脚本进行嵌套实现,不再一一说明。
其他方案:Emacs
如果你是Emacs用户的话,可以使用emacs的批量替换,具体可查看我的另一篇帖子 emacs的使用技巧记录中 “Emacs 批量查找与替换” 章节。Emacs 批量查找与替换功能操作起来虽然比其他软件繁琐许多,但是你可以详细的看到要被替换的项,这一点相对于单纯的脚本替换是有安全性的。
文章原创,可能存在部分错误,欢迎指正,联系邮箱 cao_arvin@163.com。