Linux文本处理三剑客之sed
2015-11-09 23:04
791 查看
昨天讲完了grep,以及实现grep高级过滤功能所必须得正则表达式,那么今天我们来讲解三剑客之中的sed命令。
一、什么是sed
二、sed命令详解
三、sed实例
一.什么是sed(Stream EDitor)
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
2、sed命令详解
1.命令语法
三、sed实例
1.删除空白行
2.删除每行行首的空白字符
一、什么是sed
二、sed命令详解
三、sed实例
一.什么是sed(Stream EDitor)
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
2、sed命令详解
1.命令语法
sed - stream editor for filtering and transforming text SYNOPSIS sed options 'AddressCommand' file ....2.options
-n: 静默模式,不再默认显示模式空间中的内容 -i: 直接修改原文件 -r: 表示使用扩展正则表达式 -e SCRIPT -e SCRIPT:可以同时执行多个脚本 -f /PATH/TO/SED_SCRIPT, 如sed -f /path/to/scripts file3.Address
Startline,Endline:匹配起始和结束,如:1,100表示第1行到第100行 $则表示最后一行 /Pattern(RegExp)/:匹配模式的行,如/^root/ /Pattern1/,/Pattern2/:第一匹配到行pattern1,到第一次匹配到patter2 如/root/,/ftp/ LineNumber 指定行 如:10 表示第10行 startline,+N:从startline开始,向后的N行 如:4,+2 第4行和向下的2行4.Command
a \:在当前行下面插入文本 i \:在当前行上面插入文本 r file:从file中读行 w file:写并追加模板块到file末尾 W file:写并追加模板块的第一行到file末尾 s:替换指定字符,修饰符g:全局替换,修饰符i:忽略字符大小写 d:删除,删除选择的行 p:打印模板块的行 P:打印模板块的第一行 c \ :把选定的行改为新的文本 D:删除模板块的第一行 h:拷贝模板块的内容到内存中的缓冲区 H:追加模板块的内容到内存中的缓冲区 g:获得内存缓冲区的内容,并替代当前模板块中的文本 G:获得内存缓冲区的内容,并追加到当前模板块文本的后面 l:列表不能打印字符的清单 n:读取下一个输入行,用下一个命令处理新的行而不是用第一个命令 N:追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码 q:退出Sed b:lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾 !:表示后面的命令对所有没有被选定的行发生作用 =:打印当前行号码 #:把注释扩展到下一个换行符以前5.正则元字符
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行 $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行 . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行 \(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love** \< 匹配单词的开始,如:/\ 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行 \> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行 x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行 x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行 x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行
三、sed实例
1.删除空白行
[root@soysauce ~]# sed '/^$/d' /etc/inittab
2.删除每行行首的空白字符
[root@soysauce ~]# sed 's@^[[:space:]]*@ @g' /etc/inittab3.替换/etc/passwd文件中的root为ROOT
[root@soysauce ~]# sed -n 's/root/ROOT/p' /etc/passwd # -n静默模式,p打印匹配到的行 ROOT:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/ROOT:/sbin/nologin4.删除第10行到最后一行
[root@soysauce ~]# sed '10,$d' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin5.为第1行以及向后的4行所有以非空白字符和非#号开头的行添加注释
[root@soysauce ~]# sed -r "1,+4s/^([^[:space:]#])/#\1/g" /etc/passwd #root:x:0:0:root:/root:/bin/bash #bin:x:1:1:bin:/bin:/sbin/nologin #daemon:x:2:2:daemon:/sbin:/sbin/nologin #adm:x:3:4:adm:/var/adm:/sbin/nologin #lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync # 篇幅过长,故只截取一部分 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown6.在/etc/passwd文件中查找到root字符串所在行后面插上两行
[root@soysauce ~]# sed '/root/a\ hello,world\ hello,python' /etc/passwd root:x:0:0:root:/root:/bin/bash hello,world hello,python bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin news:x:9:13:news:/etc/news: uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin hello,world hello,python7.只打印第1行和第4行
[root@soysauce ~]# sed -n "1p;4p" /etc/passwd root:x:0:0:root:/root:/bin/bash adm:x:3:4:adm:/var/adm:/sbin/nologin8.打印第1行至第4行
[root@soysauce ~]# sed -n "1,4p" /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin9.打印从第1行开始,步阶数为2的行,也即第1行,第3行,第5行...
[root@soysauce ~]# sed -n "1~2p" /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin pcap:x:77:77::/var/arpwatch:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin mysql:x:101:158::/home/mysql:/bin/bash redhat:x:500:500:redhat,redhat.com,110,120:/home/redhat:/sbin/nologin10.替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5
[root@soysauce ~]# sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab id:5:initdefault: # 如想直接修改文本就加上-i选项11.删除/etc/inittab文件中开头的#号
[root@soysauce ~]# sed 's@^#@@g' /etc/inittab12.删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符
[root@soysauce ~]# sed -r 's@^#[[:space:]]+@@g' /etc/inittab13.取出一个文件路径的目录名称和基名
[root@soysauce ~]# echo "/etc/rc.d/" | sed -r 's@^(/.*)/[^[:space:]]+@\1@g' /etc [root@soysauce ~]# echo "/etc/inittab" | sed -r 's@^/.*/([^[:space:]]+)@\1@g' inittab
相关文章推荐
- Linux下使用sed编辑器详解
- sed或awk处理文件最后一行的实现方法
- 查看某时间段到现在的系统日志的sed命令
- SED单行脚本快速参考(流编辑器)第1/2页
- sed找到关键字所在行并将其前面的第一个字符删除的命令
- sed初学者实用说明
- sed模式空间和暂存空间的区别
- Shell正则表达式之grep、sed、awk实操笔记
- grep,awk,sed实例
- Linux sed命令基础解释
- linux sed用法
- sed详解+实例
- 利用sed,cat合并分割文件
- sed实用——文本转换
- sed高级应用——反转行
- 打印文件内容和行号
- linux之sed用法
- sed命令在指定位置插入字符
- linux sed命令详解
- Vim实现批量注释的方法