sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。


sed使用参数:

            -n∶取消默认的输出,使用安静(silent)模式。

           -d: 删除
           -e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编               辑
           -f∶指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内。
           -r∶sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
           -i∶直接修改读取的文件内容,而不是由屏幕输出

举例:删除某行

    删除第三行到第四行 

    [root@www tmp]# sed '3,4d' fstab

    删除最后一行

    [root@www tmp]# sed '$d' fstab

    显示第三行到第四行

    [root@www tmp]# sed -n '3,4p' fstab

    显示最后一行

    [root@www tmp]# sed -n '$p' fstab

    显示第五行

    [root@www tmp]# sed -n '5p' fstab

    查询关键字xs所在所有的行

    [root@www tmp]# sed -n '/xs/p' fstab

    在第一行后增加字符串“hello”

    [root@www tmp]# sed -n '1a hello' fsta

    在第一行到第三行后增加字符串“hello”

    [root@www tmp]# sed -n '1,3a hello' fsta

练习

1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;

    ~]# sed  's@^[[:space:]]\+@@' /etc/grub2.cfg

2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;

    ~]# sed  's@^#[[:space:]]*@@'  /etc/fstab

3:输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname

    ~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'