我们在编写shell的时候, 可能需要修改一些配置文件, 比如需要修改mysql的配置文件, 在里面添加一些设置,修改一些或者删除一些.
怎么在shell中来编辑 文本文件呢.
在交互式环境下, 使用vi就可以了. 手动去修改. 但是在无人值守的shell中呢?
这里,就要用到 sed 命令了.
sed 的意思是: stream editor, 就是流式编辑器.
跟很多命令行工具(比如awk)一样, 他的功能及其强大, 当然用法和参数也及其复杂. 这里以极简的方式记录几种用法, 常用的编辑功能基本都能满足了.
sed 处理的基本方式
它的基本命令格式大概是这个样子的:
sed -options /patterns file
它的意思是要处理 文件 file, 并且把处理结果直接回显到屏幕上. 所以通常需要配合重定向来保存处理结果.
它通常的工作样式是这样的:
sed -options /patterns file > saved.txt
当然, 可以不用重定向, 而直接指定保存文件名. 这里用到
-i参数.
比如:
sed -i saved.txt -options /patterns file
这样在-i后面跟上一个文件名,就可以了.
如果-i后面没有跟文件名, 那么, 编辑结果将会保存到原文件.
sed -i -options /patters file
这样, 就是直接修改原文件了.
因为我通常都是想直接修改原文件的, 所以下面我都加上-i参数了.
sed 的基本编辑操作.
替换 是我们最常用的操作.
他的命令样式为:
sed -i "s/aaaa/bbbb" file
这个命令就是把file中的所有字符串aaaa替换成bbbb, 并保存到原文件中(因为有-i 参数).
前插入 就是在某个特征字符串的前面插入内容.
命令为:
sed -i "/aaa/i bbbb" file
这个命令是在aaa的前面插入一行bbbb, 注意中间的那个字母 i, 表示insert.
后插入 就是在某个特征字符串的后面插入内容.
命令为:
sed -i "/aaa/a bbbb" file
这个命令是在aaa的后面插入一样bbbb, 注意中间那个字母a, 表示append.