【Linux学习011】sed命令详解

时间:2021-10-15 15:31:12

一、简介

    sed(Stream EDitor)是一种行编辑器,Linux中有三种常见的行编辑器:gred,sed,awk,其中awk命令最复杂,grep命令最简单,sed命令难度适中。

    sed命令能够接收一个文件或者管道输入流,以一次处理一行的方式处理完成整个文档,能够接收管道输入流是sed命令的一个特色功能。

    sed命令的详细使用方法在线手册:http://www.gnu.org/software/sed/manual/sed.html

    sed最全命令格式展开   

sed OPTIONS... [SCRIPT] [INPUTFILE...]

    其中[SCRIPT]部分是由两部分组成:Address Command  ,其实就是

sed OPTIONS... [Address[Command]] [INPUTFILE...]

二、Options

    1.    -n    启用静默模式。默认sed命令会打印出模式空间中的内容,使用该选项将不再打印。

    2.    -r    启用扩展的正则表达式

    3.    -f    script-file    使用脚本文件添加额外的处理文本功能

    4.    -e    script         使用脚本添加额外的处理文本功能

三、Address

    Address的作用就是“选择行(Selecting Lines)”,也就是选定作用范围。

    1.n

        选择指定的某行

    2.startline,endline

        指定开始行和结束行,比如3,5,指定第三行到第五行的所有行。

    3.startline~step

        指定开始行以及步长,2~3表示选定从第2行开始每3行直到文件尾部的所有行。

    4./RegExp/

        指定所有符合正则表达式的行,如果表达式中有/,必须使用\将其转义:\/

    5.$

        选定文件最后一行

    6.startline,+n

        从startline开始,向后的n行

    7.startline,~n

        从startline开始,向前和向后的n行

四、Command

    紧接着Address的是Command,是对选中文本的操作

    1.d    删除符合条件的行

    2.p    显示符合条件的行,该命令一般和-n选项使用

    3.a \string    在在指定的行后面添加新行,内容为string,可以使用\n换行

    4.i \string    在指定的行前面添加新行,内容为string,可以使用\n换行

    5.s/regexp/replacement/flags    将匹配到的串替换成为指定的字符串,分隔符/可以自定义,如果表达式中用到了/需要使用\进行转义。

        flag可以包含

        g    :全局替换。默认只替换每行的第一个匹配项

        i      : 忽略字母大小写

五、练习

    1.删掉/etc/profile文件中行首的所有空白字符

sed -r 's/^[[:space:]]+//g' /etc/profile

        分析:删除一行中的一部分字符使用替换功能,所以使用s命令,-r指定使用扩展的正则表达式。

    2.删除/etc/profile文件中的空白行

sed -r '/^$/d' /etc/profile

    删除行使用命令d,Address使用正则表达式^$匹配,但是需要加上//

    3.删除/etc/profile文件中以#开头并且后面带有至少一个空格的字符

sed -r 's/^#[[:space:]]+//g' /etc/profile

     

    

本文出自 “狂盗一枝梅的博客” 博客,请务必保留此出处http://kdyzm.blog.51cto.com/8316029/1740917