我们在编写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
.