Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133515
  • 博文数量: 11
  • 博客积分: 171
  • 博客等级: 入伍新兵
  • 技术积分: 387
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-18 20:43
文章分类

全部博文(11)

文章存档

2013年(3)

2012年(8)

我的朋友

分类: LINUX

2012-02-02 21:47:26

  (1)命令格式及基本用法: 

  sedstream editor的缩写。是一个非交互式上下文(context)编辑器,它的功能与vim差不多(删除、插入、替换、查找……),可以说是一个非交互的vim,特别合适用在脚本中处理文本文件。

  sed命令的格式是sed options[-n,-e,] command file 或者

  sed options -f script file例如

  1. [root@localhost ~]# echo "123"|sed 's/123/456/'
  2. 456
  3. [root@localhost ~]#

  以上是第一各用法。当要处理的命令很多的时候,可以把这些命令写到一个文件里,在用sed命令时,直接用-f选项调用。例如:

  1. [root@localhost ~]# cat a.txt
  2. 123456789
  3. [root@localhost ~]# cat 123
  4. s/123/aaa/
  5. s/789/bbb/
  6. [root@localhost ~]# sed -f ./123 a.txt
  7. aaa456bbb

  (2)命令选项代码

   〈1〉替换标记

  1. [root@localhost ~]# cat a.txt
  2. 123456789
  3. 111111111
  4. 333333333
  5. [root@localhost ~]# sed -n 's/1/a/gp' a.txt
  6. a23456789
  7. aaaaaaaaa

  如上例s表示替换,后面接被替换字符与替换字符,/为分隔符(可以为其它符号如#$、!等等),g表示替换所有找到的,如果没有加g,则只替换第一个被找到的。如下,第二行只有第一个被找替换成“a”

  1. [root@localhost ~]# sed -n 's/1/a/p' a.txt
  2. a23456789
  3. a11111111

  选项-n表示不主动输出,p表示输出修改过的行,所以sed -n 's/1/a/gp'表示只输入替换过的行,否则

  1. [root@localhost ~]# sed 's/1/a/g' a.txt
  2. a23456789
  3. aaaaaaaaa
  4. 333333333

  如上,连同没有被替换的第三行也会出现。

  如果想把输出结果保存到文件,除了可以用重定向以外。可以另选项w,如

  1. [root@localhost ~]# sed -n 's/1/a/gpw b.txt' a.txt
  2. a23456789
  3. aaaaaaaaa
  4. [root@localhost ~]# cat b.txt
  5. a23456789
  6. aaaaaaaaa

  (3)作用数字地址

  可能已经有网友注意点,前面用sed,都是对所有的行起作用,其实,sed命令可以大精确到具体哪一行,或者某个范围。

  1. [root@localhost ~]# cat a.txt
  2. 123456789
  3. 111111111
  4. 333333333
  5. 987654321
  6. [root@localhost ~]# sed -n '1s/1/a/gpw b.txt' a.txt
  7. a23456789
  8. [root@localhost ~]# sed -n '2,4s/1/a/gpw b.txt' a.txt
  9. aaaaaaaaa
  10. 98765432a
  11. [root@localhost ~]# sed -n '1,$s/1/a/gpw b.txt' a.txt
  12. a23456789
  13. aaaaaaaaa
  14. 98765432a

  上面例子分别表示只处理第一行,处理2到4行,处理1到最后一行。

  (4)文本匹配模式(正则表达式)

  1. [root@localhost ~]# cat a.txt
  2. 123456789
  3. 111111111
  4. 333333333
  5. 987654321
  6. [root@localhost ~]# sed -n '/^9.*1$/p' a.txt
  7. 987654321

  如上例,从文件a.txt中找出以9开头,1结尾的行。 

  用正则表达式找出行后,可进一步处理:如下,找出以9开头,1结尾的行,并把其中的321替换成abc

  1. [root@localhost ~]# sed -n '/^9.*1$/s/321/abc/p' a.txt
  2. 987654abc

  (5)组合命令

  如果想同时进行多个替换,可以用";"号隔开如:

  1. [root@localhost ~]# sed -n 's/123/abc/p;s/321/cba/p' a.txt
  2. abc456789
  3. 987654cba

  如果想对特定的行(或多行)进行处理,可以用花括号把组合命令包括起来:

  1. [root@localhost ~]# sed -n '4{s/1/a/;s/3/b/p}' a.txt
  2. 987654b2a
  3. [root@localhost ~]# sed -n '/9/{s/1/a/;s/2/b/p}' a.txt 
  4. ab3456789
  5. 9876543ba


阅读(2316) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~