shell脚本使用记录

本文

主要对日常shell脚本使用中的一些技巧进行记录。

版本 说明
0.1 初版发布

背景

  • 主机: 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。