Chinaunix首页 | 论坛 | 博客
  • 博客访问: 440240
  • 博文数量: 127
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-02 20:51
文章分类

全部博文(127)

文章存档

2018年(6)

2015年(18)

2014年(33)

2013年(70)

分类: Python/Ruby

2014-10-21 10:41:22

    Awk的名字来源于它的开发人Aho,Weinberger和kernighan,这是一程序设计语言,非常适合结构化的处理和格式化报表的生成。
    sed是一个“做交互式的”面向字符流的编辑器。它和很多UNIX程序一样,被认为是面向字符流的,这是因为输入流通过程序并将输出直接送到标准输出端。(例如,VI不是面向字符流的,大多数dos应用程序也不是)。sed还可以有效的用于编辑非常庞大的文件,而这个文件利用交互式编辑进行处理将会很慢。
    awk典型的示例是将数据转换成格式化的报表。和sed脚本一样,awk脚本一般是利用shell包装器来调用。shell包装器是一个shell脚本,它通常包含调用awk的命令行以及awk解释的脚本。
    使用sed,你必须了解一组单字母的命令。使用awk,你必须了解程序设计语言的语句。
    sed和awk的共同点:都是面向字符流的,都是从文本文件中一次一行的读取输入,并将输出直接送到标准输出端;都使用正则表达式进行模式匹配;都允许用户在脚本中指定指令。
    g/regular/s/regular/complex/g注意:“g”的含义,开始出的“g”是全局命令,意味着对所有与地址匹配的行进行改变。结尾处的“g”是一个标志,意味着改变一行上的每个出现,不只是第一个。如果地址和模式相同,那么可以通过指定两个连续的定界符(//)来告诉ed.但是sed命令隐式的全局命令。所以g/regular/s/regular/complex/g在sed中应该为/regular/s/regular/complex/g
    awk是作为可编程的编辑器而开发的,awk和sed不同的地方是它废弃了行编辑器的命令集,提供了仿效C语言的程序设计语言,awk提供了表达式、条件语句、循环和其他程序设计结构。
    awk最独特的特征之一是它分析或拆分每个输入行,并生成可用于脚本处理的独立的单词。
    command [options] script filename, script指定了要执行的指令。如果在命令行上script,假如它包含有可以有shell解释的空格或任意字符(例如$和*),那么它必须用单引号括起。
    在sed和awk中,每个指令都包含两个部分:模式和过程。模式是由斜杆(/)分割的正则表达式。过程指定一个或多个将被执行的动作。
    当所有可用指令被解释并应用于单个行后,sed输出该行并循环处理每个输出行。另一方面,awk不自动输出行,脚本中的指令控制awk最终所做的事情。在sed和awk中的过程的内容有很大的不同,在sed中,过程有类似于行编辑器中使用的那些编辑命令组成。大部分命令由单个字母组成。在awk中,过程有程序设计语句和函数组成。过程必须用大括号括起。
    并不是在任何情况下都需要将指令用单括号包围起来,但是应该养成这个习惯。使用单引号可以阻止shell解释编辑指令中的特殊字符或空格。
    在sed中,-e选项在有多个编辑命令时使用;-n选项可以阻止自动输出,只会显示受命令影响的行。
    在通常情况下,awk将每个输入行解释为一条记录而将一行上的每个单词(由空格或制表符分割)解释为每一个字段。awk允许在模式或过程中引用这些字段。$0代表整个记录。awk程序更像一种查询语言,从文本中提取有用的信息。
    不要将awk中的字段分隔符-F选项与指定脚本文件名的-f选项弄混。同时注意三点:用大括号({})将过程括起来,用单引号('')将指令括起来,用斜杠(//)将正则表达式括起来。
    关于正则表达式部分参考awk and sed3精华版中的附录;其中比较特殊的两个字符需要注意:& 用正则表达式匹配的内容进行替换;\n 匹配第n个字串(n是一个数字),这个字串以前在pattern中用"\("和"\)"指定。

     详细请参考:《awk and sed3精华版

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