免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1260 | 回复: 0
打印 上一主题 下一主题

sed&awk学习总结1 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-11 15:30 |只看该作者 |倒序浏览

学习方法探讨:
有一个事实必须承认,Unix/Linux自由开源所带来的资源共享好处的同时也带来了重复使用,各自为山,非标准化等不好的东西。这给我们学习Unix/Linux带来了非常大的困难,有时会浪费大量时间在一些无意义的学习和重复技术上。比如:shell下存在大量的命令,各种工具也是多如牛毛,并且命令或者工具之间功能存在重复,另外,这些重复部分的语法切各不相同,比如 grep awk sed 都有正则表达式匹配的功能,但是三者的正则表达式语法又有点不相同。并且,每个工具还分 GNU 版和不是 GNU 版,之间的差别也很大,即使都是 GNU 版,那么版本号的细微差别也会带来很多差别。
    我觉得对于GNU/Linux的学习可以采取二八原则的方法,即用20%的时间学习80%的知识,比如说随便一个命令都有一大堆的选项,而在现实80%的应用只会用到20%的选项,另外的80%选项可能永远用不到,所以想快速掌握这个命令,只需要学习这20%常用选项即可。
另外你必须找到一个最快的途径能获取你不知道的剩余的80%。对于sed/awk/正则表达式的学习则更是这样,如果要全面的学习这些内容,你至少需要看《sed & awk》,
《Mastering.Regular.Expressions.3rd.Edition.Aug.2006.chm》书籍,这每一本都四五百页,为了学习这两个工具,你估计都得花几个礼拜的时间,但可能你就是在一两个地方用到一下。算一下性价比确实不高。所以为了节省时间,学习快速参考手册或者别人写
的总结则是一个很好的学习途径。
一、sed总体认识:
1)sed一个非交互式的可进行批处理文本流编辑器。
2)处理方式:逐行从参数中指定的输入文件读入一行到模式空间--临时行缓冲区,然后进行模式匹配,如果匹配成功则依次执行后面的命令。同时将结果发送到标准输出或者重定向的文件中去。
3)sed书写格式:   
sed [-n][-e] ‘[address[,address]][!]command [arguments]’ inputfiles
sed [-n] -f scriptfile file(s) #此种情况用的非常少,所以不考虑这种情况。
说明:
  *第二中方式用的极少,暂时不考虑此种情况。
  *address我们也叫定位文本的方式,一般包括两种:行号和正则表达式,我们一般把他们同意叫成正则表达式。
  *address可以有两个,它们之间用“,”分开,表示从address1到address2之间的所有行。
  *a, i, r, q, and =.命令前面只能有一个address。
  *address后面的"!"表示和address定位到的行相反的所有行。

二、sed常用方法:
sed 选项 ‘正则表达式 命令’ 输入文件
选项:
     -n   不打印; sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑),p命令可以用来打印编辑行
     -e   下一命令是编辑命令,使用多项编辑时加入此选项
     -i   编辑原文件(此选项慎用,如果使用则原文件就会被修改,无法恢复)。   
     -f   后面指定的脚本文件中所有命令相当于一个命令一样地被执行         
正则表达式:
     x          #x为一行号,比如1
     x,y        #表示行号范围从x到y,如2,5表示从第2行到第5行
     /pattern/      #查询包含模式的行,如/disk/或/[a-z]/
     /pattern/pattern/   #查询包含两个模式的行,如/disk/disks/
     /pattern/,x    #在给定行号上查询包含模式的行,如/disk/,3
     x,/pattern/    #通过行号和模式查询匹配行,如 3,/disk/
     x,y!       #查询不包含指定行号x和y的行
常见的几个命令:
  s    #使用pattern2替换pattern1,有点特别是"s"写在前面sed  's/pattern1/pattern2/g' testfile
  p    #打印匹配行             sed  -n '/pattern/p' testfile                       
  d    #删除匹配行                  sed '/pattern/d' testfile                     
  i    #在匹配行前插入指定文本         sed '/pattern/i\--toinsert--' testfile
  a    #在匹配行后附加指定文本信息        sed '/^pattern/a\--toappend--' testfile
   
其他命令
  g       #在行内进行全局替换,常和s配合使用 sed  's/pattern1/pattern2/g'  testfile
  c       #将当前匹配行修改成指定文本行   sed '/ming/c\-student-' datafile
  r       #将一个文件的内容追家到匹配行的后面  sed '/pattern/r file' datafile
  w       #将当前匹配的行写入到一个新文件中sed -n ‘/pattern/w newfile’ datafile
  q       #处理完前面的模式匹配完成后退出     sed ‘5q’ datafile
  =       #显示文件行号                     sed -n '$=' datafile === wc -l
  y       #按照一对一的方式从左到有进行转换    sed '1,3y/abc/ABC/' datafile
其他参考资料:
GNU sed:
http://www.gnu.org/software/sed/manual/sed.html
《Quick Reference for sed》


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/70075/showart_2118001.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP