Chinaunix首页 | 论坛 | 博客

lmk

  • 博客访问: 163044
  • 博文数量: 32
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 87
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-17 19:07
文章分类

全部博文(32)

文章存档

2017年(2)

2016年(3)

2014年(14)

2013年(13)

我的朋友

分类: LINUX

2014-05-02 15:56:06

sed是一个非交互式的文本编辑器,可以对文本文件和标准输入进行编辑
标准输入可以来自键盘,文件重定向,字符串,变量,管道的文本。
sed从文本行或者标准输入中读取数据,将其复制到缓冲区,然后读取命令行或者脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或者脚本中的所有命令都执行完毕。

sed只是对缓冲区原始文件的副本进行编辑,并不编辑原始的文件,因此,如果需要保存原始的内容,需要将输出重定向到另一个文件,使用如下的命令:sed   'sed命令'  inputfile > outputfile。sed的w选项也可以将结果保存到某个文件中

有三种调用sed的方式
1.在shell命令行中输入命令调用sed
   sed   [选项]   'sed命令'  inputfile          注意:需要用单引号将sed命令引起来
2.将sed命令插入到脚本文件中,然后通过sed命令调用它。
   sed   [选项]  -f  sed脚本文件  inputfile
3.将sed命令插入到脚本文件后,将此脚本文件设置为可执行,然后执行该脚本文件。这种情况的脚本文件需要以#!符号开头,后面是解析这个脚本的程序名。
   ./sed脚本文件  inputfile

不管是哪一个调用,如果没有指定输入文件,sed将从标准输入中接受输入


sed选项:
1. -n    不打印所有的行到标准输出
2. -e     表示将下一个字符串解释为sed编辑命令,如果只传递一个编辑命令给sed,则-e选项可以忽略
3. -f      表示正在调用sed脚本文件

sed命令由定位文本行和sed编辑命令组成,sed编辑命令对定位文本行进行各种处理

定位文本的方法:
x                            x为指定行号
x!                           匹配除了x号行外的所有行
x,y                         指定从x到y的行号范围
/pattern/                 查询包含模式的行
/pattern/pattern/      查询包含两个模式的行
/pattern/,x               从与pattern的匹配行到x号行之间的行
x,/pattern/               从x号行到与
pattern的匹配行之间的行
x,y!                         查询不包括x和y范围行号内的行

sed编辑命令:
p       打印匹配行
=      打印文件行号
a\      在定位行号之后追加文本信息
i\       在定位行号之前插入文本信息
d       删除定位行
c\      用新文本替换定位文本
s       使用替换模式替换相应模式
r       从另一个文件中读文本
w      将文本写入一个文件
y       变换字符
q       第一个匹配模式完成后退出
l        显示与八进制ASCII码等价的控制字符
{}      在定位行执行的命令组
n       读取下一个输入行,用下一个命令处理新的行
h       将模式缓冲区的文本复制到保持缓冲区
H       将模式缓冲区的文本追加到保持缓冲区
x       互换模式缓冲区和保持缓冲区的内容
g       将保持缓冲区的内容复制到模式缓冲区
G       将保持缓冲区的内容追加到模式缓冲区


下面举几个例子:
sed  -n  '3,6p'  inputfile
sed  -n  '/suda/p'  inputfile          sed对大小写也是敏感的
sed  -n  -e  '/suda/p'  -e  '/suda/='  inpufile       sed不支持同时带有多个命令,如sed  -n  '/suda/p='  inputfile
带有多个编辑命令的sed一般格式
sed  [选项]  -e 命令1  -e  命令2  -e  命令3 ..... -e 命令n  inputfile

追加文本一般格式          sed   [选项]  '指定地址a\text'   inputfile                 
指定地址以匹配模式/pattern/或者行号的形式给出,用于定位新文本的追加位置,text是要追加的文本,将text追加到匹配行的后面
如果不指定文本追加位置,sed默认放置到每一行的后面。
 
sed脚本文件的编写:文件名append.sed
cat  append.sed 
#!/bin/sed  -f
/pattern/a\we add a new line\
we add another line
chmod 777 append.sed
./append.sed  inputfile


注意:
1.$在正则表达式中匹配行尾,但是在sed命令中表示最后一行。
2.sed基本编辑命令可以放在''内,也可以放在''外。 如sed -n '$p' inputfile      sed -n '$'p inputfile



插入文本的一般格式
sed  [选项]  '指定地址i\text'  inputfile            将text插入到匹配行的前面

修改文本的一般格式
sed  [选项]  '指定地址c\text'  inputfile            用text替换匹配到的文本行

删除文本的一般格式
sed  [选项]  '指定地址d'  inputfile                将匹配的行或者行范围删除

替换文本的一般格式
sed  [选项]  's/被替换的字符串/新字符串/[替换选项]'  inputfile 
替换文本可以替换一个字符串,修改文本是对整行进行替换,替换文本更加灵活
sed首先匹配被替换的字符串,匹配成功后,用新字符串替换它,选项做进一步的细化
选项有如下的:
g      表示替换文本中所有出现被替换字符的地方。不加g选项,当出现文本行中某一行有两个以上匹配的字符串时只会替换第一个
p      与-n 选项结合,只打印替换行
w 文件名   表示将输出定向到一个文件
sed替换文本命令还可以指定替换第几次匹配到的字符串,命令如下
sed  [选项]  's/被替换的字符串/新字符串/3p'     表示替换第三次匹配到的字符串,数字范围在1-512之间

&符号用来保存被替换的字符串以供调用,举例如下:
sed -n 's/old/(&)/pg' inputfile
sed -n 's/old/(old)/pg' inputfile    这里&=old,用(old)替换old


写入一个新文件的一般格式
sed  [选项]  '指定地址 w 文件名'  inputfile

从文件中读入文本的一般格式
sed  [选项]  '指定地址 r 文件名'  inputfile
sed命令从文件名对应的文件中读取文本,并附加在匹配的行后面
 
退出命令
sed  [选项]  '指定地址 q'  inputfile
表示完成首次的相应匹配后就立即退出

变换命令的一般格式
sed  [选项]  'y/被变换的字符序列/变换的字符序列/'  inputfile
对字符逐个进行替换

显示控制字符
sed  -n  '1,$l'  inputfile        
显示第一行到最后一行之间所有的控制字符

在定位行执行命令组的一般格式
sed  [选项]  '/pattern/{sed编辑命令1;sed编辑命令2;.......sed编辑命令n;}'  inputfile
此命令等同于使用选项-e的sed命令,实质是执行多个命令。
 
利用分号进行多个编辑命令
sed  [选项]  'sed编辑命令1;sed编辑命令2......'   inputfile

n h H g G命令不常用,这里暂不做介绍。
阅读(1592) | 评论(0) | 转发(0) |
0

上一篇:Linux时间管理之hardware

下一篇:awk命令

给主人留下些什么吧!~~