Chinaunix首页 | 论坛 | 博客
  • 博客访问: 239467
  • 博文数量: 65
  • 博客积分: 1430
  • 博客等级: 中尉
  • 技术积分: 700
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-27 00:30
文章分类
文章存档

2011年(65)

分类: LINUX

2011-07-24 17:53:32

sed工具介绍
    sed 可以分析标准输入的数据,然后将数据经过处理后,再将它输出到标准输出。它有替换,删除,
    新增,选取特定行等处理功能。
语法:sed [options] PATTERN/COMMAND files...
      sed [options] ADDR1,ADDR2/COMMOND files...
选项:1.-n 使用安静模式。在一般sed的用法中,所有来自STDIN的数据一般都会显示在屏幕上,但如果
         加上-n,则只有经过sed特殊处理的那一行才会列出来
      举例分析:
      sed -n /cache/p /proc/cpuinfo(输出含有cache的行,使用-n 可以避免输出没有被模式匹配到
             的行)
      sed 1,3p /proc/cpuinfo (输出前三行,默认是匹配到的输出2次,没匹配到的输出1次)
      sed -n 1,3p /proc/cpuinfo (使用-n ,则只输出匹配到的行,且仅仅输出一次)
      2.-e 允许多项编辑
     举例分析:
     sed -e '1,$s/\b[Cc][[:alpha:]_]*\b/&s/g' -e '1,$s/\bm\([[:alpha:]_]*\)\b/M\1/g'
         /proc/cpuinfo(-e 允许多项编辑   在匹配到的内容后加s  把m变成M)
     3.-i(可以修改原文,不要轻易使用,使用时必须慎重,要知道自己在做什么,否则后果很严重)
操作:1.a\  新增,后接字符串,而这些字符串会在新的一行出现
      举例分析:
      sed "/^processor/a\this is my cpu." /proc/cpuinfo(在/proc/cpuinfo目录下的以processor
          开头的行后添加一行this is my cpu)
      2.p  打印,及打印某个选择的数据。通常p会和sed -n 一起运行
      举例分析:
      sed /cache/,/wp/p /proc/cpuinfo(打印以第一个含有cache的行开始,到第一个含有wp的行结尾
          的所有的行)
      3.d  删除匹配到的行,因为是删除,通常d后面不接任何内容
      举例分析:
      sed ‘2,5d’/etc/passwd  (删除/etc/passwd下的第2行到第5行)
      sed /cache/d /proc/cpuinfo(删除/proc/cpuinfo下含有cache的行)
      sed /^[Cc]/d /proc/cpuinfo (删除/proc/cpuinfo下以c或C开头的行)
      4.i\  插入,i的后面可以接字符串,这些字符串会在新的一行出现(当前行的上一行)
      举例分析:
      sed “/^model/i\#this is my cpu" \n /proc/cpuinfo(\n表示添加多行)
      5.s 查找并替换。通常s操作可以和正则表达式一起使用
      举例分析:
      sed '1,$s/yes/YES/g' /proc/cpuinfo ($表示最后一行  将/proc/cpuinfo中第一行到最后一行
           的所有yes换成YES)
      sed '1,$s/\bc/C/g' /proc/cpuinfo  (\b跟/<作用一样  将/proc/cpuinfo中第一行到最后一行
           的所有以c开头的单词换成以C开头。g表示全局替换,如果旧内容出现多次,则全都替换成
           新内容))
      & 保存查找串以便在替换串中引用
      举例分析:
        sed '1,$s/\b[Cc]\b/&s/g' /proc/cpuinfo(以c开头的所有单词后加s)
 
 
  关于sed的小练习:
     练习1:将/etc/inittab文件中以id开头后面跟了两个冒号且两个冒号之间有一个数字的那一行中那
            两 个冒号间的数字改为3
           答案:
            sed ‘1,$s/^id:[0-9]:'/id:3:/' /etc/inittab 
    练习2:将/etc/passwd文件中以n开头的所有单词的词首字母改为大写
           sed '1,$s\/N\1/g' /etc/passwd
    练习3:将/proc/meminfo文件中所有以HugePages开头的行后面添加“#For performance”一个新行
           sed  "/^HugePages/\a#For performance" /proc/meminfo    
    练习4:删除/etc/inittab文件中所有以#开头,或者以一些空白字符后跟一个#开头的行,并且将所
           有以一个空格后跟一个数字结尾的行中的那个行尾的数改为0;  
           sed -e‘/^[[:space:]]*#/d' -e 's/ [0-9]$/ 0/' /etc/inittab
阅读(1496) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~