在Linux/Unix中有许多的编辑器,比如vim,emacs。我们这里要了解的sed也是一个编辑器,他是一个流编辑器,因为sed是流编辑器,所以sed能从管道这样的标准输入接收数据并做编辑。

   sed在做编辑的时候是将文件中的行存储到临时缓冲区,称为模式空间(pattern space)。然后sed会对模式空间里的内容做处理,将处理的结果送到屏幕,然后继续将下一行存储到模式空间,并做处理。周而复始,直至文件最后一行。但是文件本身的内容并没有改变,只是将处理过后的结果输出到了屏幕,当然你也可以通过重定向将结果输出到文件中区。

   所以当我们面对一大堆的日志文件的时候,可以通过sed命令筛选出对我们有用的信息。

sed的基本用法

   sed [options] 'command' file

   [options]:

       -n:使用安静模式,在一般的sed用法中,所有模式空间中的内容都会被输出到屏幕。加了-n选项以后只有经过sed处理过的内容才被输出到屏幕。

       -i:直接修改读取的档案内容,而不是输出到屏幕。

       -r:支持扩展正则表达式。

       -f:直接将sed的动作写入一个文本中,然后用-f filename执行文件中的sed动作。

       -e:在命令列模式下进行sed的动作编辑。

   command:

       command是包括地址的定界以及相关的function动作。

       地址定界:

       start_line,end_line:例如 1,7表示第一行到第七行的内容。

       /pattern/:被模式匹配的内容

       行地址定界可以同模式定界一起使用例如sed -n ‘3,6{/^#/p}’ filename

       function:

       a:新增,a后面的字符串追加到匹配的行后面

       c:取代,c后面的字符串取代匹配的行。

       i:插入,i后面的字符串被插入到匹配行的前面一行。

       p:打印,将匹配到的行打印输出到屏幕,通常同sed -n一起使用。

       s:替换,通常用的模式为,sed -n ‘s/匹配到的内容/希望修改的内容/g’

       g:表示一行中的所有匹配,


用几个实例说明sed命令的具体用法:

将/etc/fstab拷贝到我们要做测试的目录中。用sed命令来现实第1行到第三行的内容。

sed命令基本用法_定向

例1:-n选项

可以看到1-3行的内容被显示了两次,即fstab所有的内容都现实输出到了屏幕。同时被sed匹配到的第一行到第三行也输出到了屏幕。

我们可以给sed命令加-n选项让屏幕只输出匹配到的内容。

sed命令基本用法_定向_02

例2:-i选项

在例1中的结果是输出到屏幕的,原文件并没有变化。如果想要将输出的结果覆盖原文件需要使用-i选项。

sed命令基本用法_sed_03

这个例子中我们将所有的#替换为了###并且在原文件中做了保存。

例3:-f选项

我们先来写一个文本文件,将我们要做的sed操作写到文本中,然后用-f选项调用。

sed命令基本用法_定向_04

例4:-e选项

当我们需要用到多个sed操作的时候我们可以用-e选项。

例5:地址定界

sed命令基本用法_定向_05

以上是将第三行到第六行的内容输出屏幕。sed命令基本用法_定向_06

使用模式匹配将所有以#开头的行显示到屏幕。

我们要是想将第五行到第十行中所有以#开头的行显示输出到屏幕我们可以用如下命令。

sed命令基本用法_定向_07

例6:替换。

sed命令中还会经常使用到的是替换,还是以fstab文件为例,我们将第六行中的第一个c改为大写的C

sed命令基本用法_sed_08

我们将第6行第二个以后的所有c都改成大写的C,我们可以用如下命令。

sed命令基本用法_定向_09