Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99786
  • 博文数量: 13
  • 博客积分: 266
  • 博客等级: 二等列兵
  • 技术积分: 272
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-25 19:30
文章分类

全部博文(13)

文章存档

2013年(4)

2012年(9)

分类: Python/Ruby

2012-10-10 09:35:28

sed命令的格式
sed [-options] [command] [stdin]
在命令行上执行时需加参数-e,在档案内执行时需加参数-f(对应的[command]为sed脚本时)

指定sed的作用范围

  1. sed -e '1d' myfile
  2. sed -e '1,10d' myfile
  3. sed -e '/begin/,/end/p' myfile

注解:1。删除myfile文件中的第一行
      2。删除myfile的第一行到第十行
      3。打印myfile中begin到end之间的内容

也可以多个command在一条sed中使用

  1. sed -e '1,10d' -e 's/good/bad/g' myfile
删除1至10行,并将myfile中的good全部替换成bad

sed中的正则表达式
这里通过几个案例来说明,详细的正则表达式自行查阅。

  1. sed -e '/^$/d' myfile
删除myfile中的空行


  1. sed -n -e '/main[[:space:]]*(/,/^}/p' mydir/*.c
-n选项表示默认不打印
*表示将与前一个字符的零或多个出现匹配
[[:space:]]*匹配零个或者多个空格
^}以}结尾的
所以上述命令表示,搜索mydir文件夹下以.c结尾的文件中main(和}之间的内容并打印。

假设myfile.txt文件中为如下内容:

  1. <b>This</b> is what <b>I</b> meant.
若想让myfile.txt输出为如下内容

  1. This is what I meant.
可以使用如下sed命令

  1. sed -e 's/<[^>]*>//g' myfile.txt
[^>]* 匹配零个或者多个不包含>的字符
则命令表示搜索myfile.txt中包含<...>的字符并全部删除,其中<...>中不包含>字符



  1. sed -e 's/.*/# &/' myfile
.*匹配零个或多个字符,这里表示非空行
&在行首插入字符,/#&/在行首插入#  
则命令表示将myfile中所有非空行行首添加# 

组合使用
建复杂的sed命令,需要输入多个command时,有很多方法可以实现。
首先可以在命令之间加分号,如下命令,'='命令告诉sed打印行号,'p'命令告诉sed打印该行

  1. sed -n -e '=;p' myfile
无论什么时候指定了两个或更多命令,都按顺序将每个命令应用到文件的每一行。虽然分号很方便,但是在某些场合下,它不能正常工作。另一种替换方法是使用两个 -e 选项来指定两个不同的命令:

  1. sed -n -e '=' -e 'p' myfile
对于复杂的多行脚本,最好的方法是将命令放入一个单独的文件中。然后,用 -f 选项引用该脚本文件:

  1. sed -n -f mycommand.sed myfile


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