sed被称为流编辑器(stream editor)。它和一般写字板之类的文本编辑器不同,它通过逐行读入文本文件,按照用户指定的方式对文本进行过滤。用户通过脚本命令告诉
sed该如何处理文本文件,所以
sed可以看作一种程序语言。这看起来没有使用鼠标和键盘编辑文件的编辑器方便,但是当我们需要自动处理大量文本文件时,这会非常方便。
例如,我需要把很多数据文件的某些行注释掉,也就是在所有数据文件的某几行开始处加上字符“
# ”。如果一个个文件编辑,工作量就太大了。下面这个命令可以很方便的实现这个功能:
sed -i '1,5 s/^/# /' *.txt
这个命令把每一个
.txt作为后缀的文件前5行开始处加上“
# ”。
下面把常用的一些
sed命令总结一下。
- 替换一段文字
这个恐怕是sed最常用的方式了。sed 's/a/A/' <old >new
这个命令把文件old中的小写字幕a换为大写字幕A,并且把新的文件存为new。但是这个命令只能替换第一个a,如果想要把文件old中所有的a都替换掉,需要加上一个参数:sed 's/a/A/g' <old >new
上面命令中的斜杠/是分隔符,但是sed没有要求一定用斜杠作为分隔符,其实可以用任何字符(只要不和搜索字符矛盾)作为分隔符,例如冒号等等。- 执行多个命令
上面的例子中只执行了一个命令,如果需要同时执行多个命令,需要用到参数-e:sed -e 's/a/A/' -e 's/b/B/' <old >new
- 指定对某些行操作
如果只对某些行进行操作,可以像一开始举的例子那样,使用行号指定范围:sed '1,10 s/A/a/'
另外,
这里有一个很有用的
sed常用单行命令参考。