首页 > 其他 > 详细

sed 笔记

时间:2017-03-09 11:30:28      阅读:386      评论:0      收藏:0      [点我收藏+]

sed是一个非交互式文本编辑器,他可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘,文件重定向,字符串,变量甚至来自于管道的文本。sed适用于以下三种场合:

  • 编辑相对交互式文本编辑器而言太大的文件。
  • 编辑命令太复杂,在交互式文本编辑器中难以输入的情况。
  • 对文件扫描一遍,但是需要执行多个编辑函数的情况

调用sed有三种方式,一种为she‘ll命令行方式,另外两种是将sed命令写入脚本,然后执行该脚本文件。三种方式归纳如下:

  • shell命令行输入命令调用sed,格式为:
  1. sed [选项] sed命令 输入文件
  • 将sed命令插入脚本文件后,通过sed命令调用它,格式为:
  • sed [选项] -f sed脚本文件 输入文件
  • 将sed命令插入脚本后,最常用的方法是将该脚本设置为可执行文件,然后直接执行该脚本,格式为:
  1. ./sed脚本文件 输入文件

sed命令选项及意义:

选项 意义
-n 不打印所有行到标准输出
-e 表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略
-f 表示正在调用sed脚本文件

sed通常由定位文本行和sed编辑命令两部分组成,sed提供以下两种方式定位文本:

  1. 使用行号,指定一行或者行号范围
  2. 使用正则表达式

下表是sed定位文本的方法

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

下面将在示例中说明sed的命令选项的意义,新建一个名为sedtest的文件,内容如下:(测试过程中可能会有修改)

this is a test file for sed
Test is real important
what i want to say is: haha nobody is god except allah.
This is very IMPORTYANT what you want to say is:goodbye! where to go? I don‘t know! this cool!
  •  -n选项
#第一条命令,带-n选项,只打印第一行
[root@linuxTest ~]# sed -n 1p sedtest 
this is a test file for sed
#第二条命令,不带-n,不仅打印第一行,还打印输入文件的全部内容
[root@linuxTest ~]# sed 1p sedtest 
this is a test file for sed
this is a test file for sed
Test is real important
what i want to say is: haha
nobody is god except allah.
This is very IMPORTYANT

  #打印行范围

  root@linuxTest ~]# sed -n ‘2,6p‘ sedtest
  Test is real important
  what i want to say is: haha


  nobody is god except allah.
  This is very IMPORTYANT

 
  • -e选项
#sed编辑命令“=”用来匹配is关键字的行号,如果希望行号和行内容都打印出来,则需要传递p和=两个编辑命令
[root@linuxTest ~]# sed -n -e /is/= -e /is/p sedtest 
1
this is a test file for sed
2
Test is real important
3
what i want to say is: haha
5

-s选项

#使用替换模式替换相应模式
#p选项,只替换每行第一个符合条件的文本
[root@linuxTest ~]# sed -n s/is/IS/p sedtest 
thIS is a test file for sed
Test IS real important
what i want to say IS: haha
nobody IS god except allah.
ThIS is very IMPORTYANT
what you want to say IS:goodbye!
thIS cool!
#2p,如果每行含有两个及两个以上目标文本,则只替换每行第二个符合条件的文本
[root@linuxTest ~]# sed -n s/is/IS/2p sedtest 
this IS a test file for sed
This IS very IMPORTYANT
#pg,如果该行中含有目标文本,则不论几个都替换。
[root@linuxTest ~]# sed -n s/is/IS/pg sedtest 
thIS IS a test file for sed
Test IS real important
what i want to say IS: haha
nobody IS god except allah.
ThIS IS very IMPORTYANT
what you want to say IS:goodbye!
thIS cool!
#w,替换后,保存文本到另外一个文件
[root@linuxTest ~]# sed -n ‘s/is/IS/gw output‘ sedtest 

 

sed 笔记

原文:http://www.cnblogs.com/nurruden/p/6381915.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!