sed命令详解及实例

要想灵活的并按照需要处理文本,我们需要充分的学会并掌握三大文本处理工具,grep、sed(数据流编辑器)、awk(报告文本的生成器)

下面介绍并学习sed命令的基本用法

sed又名stream editer,是行编辑器(编辑器包括字处理器和文本编辑器),是文本编辑器,是操作纯Ascii码文本的,操作文本是按行进行操作的,逐行处理文本,默认并不直接处理文本本身,操作时是将文本逐行读取到内存中,在内存中处理后并将符合模式匹配到的行显示到屏幕上,内存空间称为sed模式空间。 默认是打印模式空间。

SYNOPSIS

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

sed [OPTION]... ‘AddressCommand‘ file....地址加命令

$:表示文本中的最后一行

Option:

-n:表示静默模式,不显示模式空间中的内容,只与命令相关

-i:直接修改原文件

-e script -e script:可以同进执行多个脚本

-f /path/to/sed_script: 表示读取文件中的脚本对文本进行处理

sed -f /script file..

-r:表示使用扩展正则表达式

Address:

1、startline,endline,如1,10指从第一行到第10行;

2、/pattern(regexp正则表达式)/,如/^root/找出以root开头的行

3、/pattern1/,/pattern2/,表示第一次被模式1匹配到的行和第一次被模式2匹配到的行中间所有的行。

4、linenumber表示批定的行或特定的行

5、startline,+N,表示从startline开始后的N行,总共是N+1行;

Command:

d:表示删除符合条件的行;

如:删除/etc/fstab文件中的前四行,如第一行到倒数第二行,则为1,$-1

                [[email protected] ~]# sed "1,4d" /etc/fstab

如:删除包含sys的行

                [[email protected] ~]# sed "/sys/d" /etc/fstab

如:删除第一行开始向后十行的内容

                [[email protected] ~]# sed "1,+10d" /etc/fstab

如:只删除第五行则

                [[email protected] ~]# sed "5d" /etc/fstab

p:表示显示符合条件的行,默认显示模式空间中的一次和命令匹配到的一次,共二次

如:显示文件中以/开头的行,并只显示符合条件的行

                [[email protected] ~]# sed -n "/^\//p" /etc/fstab

a \sting:在批定或匹配到的行后面新增一行,内容为string

如:在/开头的行后新增一行,内容为“# It is a blank line.”

                [[email protected] ~]# sed ‘/^\//a \# It is a blank line.‘ /etc/fstab

如:在/开头的行后新增两行,内容为“# It is first blank line.”“# It is second  blank line.”

                 [[email protected] ~]# sed ‘/^\//a \# It is first blank line.\n# It is second  blank line‘ /etc/fstab

i \sting:在批定或匹配到的行前面新增一行,内容为string

r filename:表示在指定的行后将指定的文件内容添加进来,用于合并文件内容

如:将/etc/issue文件的内容添加到/etc/fstab文件的第二行后

                [[email protected] ~]# sed ‘2r /etc/issue‘ /etc/fstab

如:将/etc/issue文件的内容添加到/etc/fstab文件的第一行和第二行后

                [[email protected] ~]# sed ‘1,2r /etc/issue‘ /etc/fstab

w filename:将批定范围内的内容另存至指定的文件中

如:将包含oot中的文件内容保存到/tmp/oot.tmp文体中,可以使用-n选项

                [[email protected] ~]# sed ‘/oot/w /tmp/oot.tmp‘ /etc/fstab

s/pattern(可以用正则表达式的元字符)/string/修饰符:表示查找匹配到的pattern字符串并替换为string,默认是每一行中第一次被模式匹配到的字符串,如需要替换行中被模式匹配到的所有字符串,则需要加修饰符;其中的/可以换成其它的字符,确保一致即可,并且不需要转义,如###,@@@,%%%等

g:全局替换修饰符

i:查找时忽略大小写

如:将/etc/fstab中包含小写oot的字符串替换为大写的OOT

                   [[email protected] ~]# sed ‘s/oot/OOT/‘ /etc/fstab

如:将/etc/fstab中以/开头的行中的/替换为#

                   [[email protected] ~]# sed ‘s/^\//#/‘ /etc/fstab

如:将/etc/fstab中的所有/替换为#

                   [[email protected] ~]# sed ‘s/\//#/g‘ /etc/fstab

后向引用:

\(\):\1,\2 等

&:表示模式匹配到的整个串

如找出以l开头e结尾中间是任意两个字符,替换为在其后加r

文件内容如下:

                    [[email protected] ~]# cat sed.txt 
                     he like.
                     her love.

#1)执行结果如下:

                    [[email protected] ~]# sed ‘s%l..e%&r%‘ sed.txt 
                    he liker.
                    her lover.
                    #2)                    
                    [[email protected] ~]# sed ‘s%\(l..e\)%\1r%‘ sed.txt     
                    he liker.
                    her lover.

若要匹配查找字符串中的一部分时,只能使用后向引用,而不能用&

如将l..e,like-->Like,love-->Love时,只能用后向引用

执行结果如下:

                    [[email protected] ~]# sed ‘s%l\(..e\)%L\1%‘ sed.txt       
                    he Like.
                    her Love.

如将history命令中的执行结果行首空白删除,并取出行号

                [[email protected] ~]# history | sed -r ‘s#^[[:space:]]+##g‘ |cut -d‘ ‘ -f1

练习题:

1、删除/etc/grub.conf文件中行首的空白字符

        [[email protected] ~]# sed  -r ‘s#^[[:space:]]+##g‘ /etc/grub.conf

2、替换/etc/inittab文件中行中id:3:initdefault:字符串中的3改为6

        [[email protected] ~]# sed ‘s#\(id:\)[0-9]\(:initdefault:\)#\16\2#g‘ /etc/inittab

3、删除/etc/inittab文件中的空白行

        [[email protected] ~]# sed ‘/^$/d‘ /etc/inittab

4、删除/etc/inittab文件行中开头的#号

        [[email protected] ~]# sed ‘s/^#//g‘ /etc/inittab

5、删除某文件中行首的#及其后面的空白字符

文件内容如下

        [[email protected] ~]# cat b.txt 
        #    It is a blank.
             #It is second blank.

执行结果:

        [[email protected] ~]# sed -r ‘s%^#[[:space:]]+%%g‘ b.txt 
        It is a blank.
             #It is second blank.

6、删除某文件中行首的空白字符及其后的#

文件内容如5中的文件

        [[email protected] ~]# sed -r ‘s%^[[:space:]]+#%%g‘ b.txt  
        #    It is a blank.
        It is second blank.

7、取出某路径的父目录

        [[email protected] ~]# echo "/etc/rc.d/rc4.d/S99local" | sed -r ‘[email protected](/.*/)[^/]+/[email protected]\[email protected]‘
/etc/rc.d/rc4.d/
时间: 2024-11-08 21:45:51

sed命令详解及实例的相关文章

sed命令详解和实例

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. sed的选项.命令.替换标记 命令格式 sed [options

cut\grep\awk\sed命令详解

cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut  选项  文件名   (2)选项作用:      -d 分隔符     按照指定的分割符进行分割      -f 列号       指定提取第几列      -c 字符范围  不依赖分割符来分割,而是通过字符范围进行字段提取      -b 字节数     以字节为单位进行分割.    (3)cut实际应用案例. 例1:cut的-d和-f选项的使用,列出/etc/passwd里面

2.2 linux sed命令详解

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

linux 之sed命令详解

sed命令详解 sed是什么 sed是linux文本处理三剑客之一,全称 StreamEDitor,非常著名的行编辑器,功能十分强大. sed的工作过程 sed处理文本时每次从文件复制出来一行,放在工作车间,又叫做模式空间,即pattern space,然后与模式进行匹配.如果复制出来的这一行不能被模式匹配到,就默认把这一行输出至标准输出(如果用户明确指定不输出也可以). 如果能被模式匹配到,就对这行数据进行用户指定的编辑操作,编辑完成后可能输出至标准输出,也可能是用户指定的其他操作.这样第一行

groupadd命令详解(实例)

 groupadd命令详解(实例)  1.作用groupadd命令用于将新组加入系统. 2.格式groupadd [-g gid] [-o]] [-r] [-f] groupname 3.主要参数-g gid:指定组ID号.-o:允许组ID号,不必惟一.-r:加入组ID号,低于499系统账号.-f:加入已经有的组时,发展程序退出. 4.应用实例建立一个新组,并设置组ID加入系统:#groupadd -g 344 cjh 此时在/etc/passwd文件中产生一个组ID(GID)是344的项目.

文本处理工具之二 sed命令详解

======博主所学知识来着于恩师马哥的亲授====== 马哥教育"2014夏令营"开始啦!!!马哥教育是目前性价比最高的Linux培训,国内好评度排名第一,并被网友称为Linux界的"黄埔军校",全部课程采用Centos6.5x86_64讲解,经过几期网络班的总结和锤炼,逐渐完善的课程体系,学员学习进度监督和优质的考试系统检验学员掌握程度,活跃的在线答疑环节,名师陪伴,牛人指点,精彩不容错过. 详情猛戳:http://www.magedu.com/ 课程内容:ht

Linux下的压缩zip,解压缩unzip命令详解及实例

Linux下的压缩zip,解压缩unzip命令 本人亲自测试总结: linux 安装unzip zip 安装命令:yum install -y unzip zip # unzip yasuo.zip 方法一: 安装命令:yum install -y unzip zip 1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:# zip -r yasuo.zip abc.txt dir12.我下载了一个yasuo.zip文件,想解压缩: # unzip yasuo.zip

grep、awk、sed命令详解2

grep.awk.sed命令详解 上一篇对grep.awk.sed命令的基本参数做了介绍,这一篇写一些例子. 1.分析access.log日志内,当天访问次数最多的10个页面,并且按降序排列. # cat access.log|awk -F ' ' '{print $7}'|sort|uniq -c|sort -nr|head -10 2.获取访问最高的10个IP地址. # cat access.log|awk -F ' ' '{print $1}'|sort|uniq -c|sort -nr|

Linux下的压缩解压缩命令详解及实例

实例:压缩当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip ============================ 另:有些服务器没有安装zip包执行不了zip命令,但基本上都可以用tar命令的,实例如下: tar -zcvf /home/zdzlibs.tar.gz /home/zdz/java/zdzlibs/ ============================ linux zip命令 zip -