sed 基础使用

sed是流编辑器(stream editor),可以对文本文件和标准输入进行编辑,标准输入可以来自键盘.文件重定向.字符串.变量,甚至来自管道的文本

sed工作流程:

读取标准输入或文本数据,-->>复制到缓冲区-->读取命令或脚本第一个命令-->在缓冲区中操作, 不断重复 ,可以看出,它只对缓冲区内的内容进行修改,不直接作用于文件

如果想保存需要重定向或者用-w选项

  sed命令格式

sed  选项  '命令' 需要处理的文件    注意:需要用单引号将sed命令引起来

sed脚本文件需要用#!/bin/sed -f (-f表示正在调用脚本文件)

 

sed常用选项:  -n 如果不加此选项,sed命令会先将整个文本打印一遍,然后如果有匹配行,还会将匹配行再打印一遍,加上后仅仅打印指定位置

                   -e 如果只有一个命令,那么可以忽略,如果有多条指令,-e 选项将下一个字符串解析为sed编辑命令

                   -f 表示正在调用sed脚本文件

 

sed命令通常由定位文本行 和 编辑命令 组成  

定位文本行:  1:行号 2:使用正则

                                               sed命令定位文本方法

选项    意义
x   x为指定行号
x,y 指定从x到y
/pattern/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
/pattern/,x 从模式匹配到x之间的行
x,/pattern/ 从x到模式匹配之间的行
x,y! 不包括x和y行号的行

                                                                                        sed编辑命令

选项 意义
p 打印匹配行
= 打印文件行号
a\ 在定位行号的下一行追加文本信息(注意是对行操作)
i\ 在定位行号的前一行
d 删除定位行(注意没有\)
c\ 用新文本替换定位文本行(针对行)
s 替换文本(针对具体字符串) s/被替换的字符串/新字符串/[替换选项]
r 从另一个文件中读文本
w 将文本写入到一个文件
y 变化字符(针对字符) sed 'y/1234/abcd/' input
q 从头开始匹配并打印,如果匹配到就立即退出,不打印后续
l(字符) 显示控制字符  sed -n '1,$l' input 显示从第一行到最后一行控制字符
{} 在定位行执行命令组;sed -n '/hello/{p;=}' input,中间用;隔开
n 读取下一个输入行,用下一个命令处理新的行
h 将模式缓冲区复制到保持缓冲区(覆盖)
H 将模式缓冲区追加到保持缓冲区(追加)
x (将保持缓冲区的内容和模式缓冲区的内容互换)
g 将保持缓冲区的内容复制到模式缓冲区(覆盖)
G 将保持缓冲区的内容追加到模式缓冲区(追加)
   
   

注意事项:

sed不支持同时带多个编辑命令的用法,比如:sed -n '/hello/p=' input  xx  应该使用 sed -n -e '/hello/=' -e '/hello/p' input

-f 选项只有调用sed脚本文件时才起作用,sed对脚本要求比较严格,不要有多余的空格什么的,如果依然报错加上\试试,换行也需要加入\

如果匹配字符中有元字符,需要用\转义

$在正则中表示行尾,在sed中表示最后一行  比如: sed '$p' input  #打印最后一行

注意sed命令格式  :sed 选项 模式 文件  其中模式如果用正则,依然需要遵循sed模式,比如sed -n '/.*bus/p' input (匹配以bus结尾的字符串)  这两个//不能少

s/   :替换时,先匹配需要替换的字符串,匹配成功后替换,[替换选项做进一步的细化;选项有w(保存) g(全局) p]

还可以加上第几次匹配,比如 sed -n 's/hello/HELLO/3p' input 将会显示第3次匹配时打印

& 符号表示保存被替换的字符串以供下面调用 比如 sed -n 's/hello/(&)/p' input  将会把匹配到的hello替换为(hello) ,和命令 sed -n 's/hello/(hello)/p' input 意义一样

注意q的用法   ;从头开始匹配并打印,如果匹配到就立即退出,不打印后续

 

=========================================以上为一些基本命令==============================================

 高级命令

n:   在下一行(注意是一行,只对一行启作用)执行下一条指令,常常与{}合用

-e {} ;  都用于多条命令

更高级用法:  sed'  #sed命令开始

    > s/hello/HELLO/

    > s/world/WORLD/

    >$d ' sed  input   #sed命令结束

执行三条命令                           

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-04-25 12:29  飞花XX  阅读(210)  评论(0)    收藏  举报