zoukankan      html  css  js  c++  java
  • sed 与 awk

      去图书馆借了一本书《sed&awk》,正好要坐火车,就带它上火车, 并且看了一下

      这本400多页的书,在火车上显然是看不完的,不过前面的几部分我仔细看了一下,觉得很适合入门,之前看sed与awk总觉得有些地方很别扭,这次倒是觉得,在这本书结合例题的情况下,显得很容易上手。

      正式开篇的的一段话:

      如果你正要开始学习sed与awk,最好从了解它们的共同点入手:

    • 它们都是使用相似的语法来调用
    • 它们都是面向字符流的,都是从文本文件中一次一行地读取输入,并将输出直接送到标准输出端
    • 它们都使用正则表达式进行模式匹配
    • 他们允许用户在脚本中指定指令

      我觉得这里,对我认识sed与awk最关键的一句话,就是“一次一行地读取输入,并将输出直接送到标准输出端”

      sed与awk之所以有这么多的共同点,原因之一是它们都起源于相同的行编辑器——ed

      于是文章先从介绍ed的命令模式开始,行编辑器,每次可以处理一行,这也是为什么sed与awk每次只处理一行,在ed上能用的命令,sed与awk都能调用,并且sed与awk的调用方式都可以归纳为:

    command [options] script filename
    

      从而可以将sed与awk的命令脚本话,成为我们实用的小工具之一。

      后面开始,讲述一些正则表达式,其实对于正则表达式,我很久前就看过,但之前在wins下很少用,就忘了,现在再看,觉得只需要记得一些常用的就可以了,稍微了解一些复杂的规则,从而可以很方便的查询其匹配规则,当然关于正则表达式,一定要注意的,就是测试,看看自己是否有误。

      对于sed脚本的编写,编写脚本时一定要遵循以下的步骤:

    • 在着手做之前要弄清楚想做什么
    • 明确地描述处理的过程
    • 在提交最终的改变之前反复测试这个过程

      此外,要弄清楚sed工作的三个基本原理:

    • 脚本中的所有编辑命令都将一次应用于每个输入行
    • 命令应用于所有的行(全局的),除非行寻址限制了受编辑命令影响的行
    • 原始的输入文件未被改变,编辑命令修改了原始行的备份并且此备份被发送到标准输出

      这三个基本原理让我一下觉得sed的执行过程变得非常好理解了,这就相当于这样一个过程:

    while(!EOF)
    {
        row = getline() 读取一行
        row -> sedscr 用sed脚本处理这一行
        print 一般情况下, 打印处理结果
    }
    

      一下就很好理解了,后面介绍的一些基本命令,就可以着手测试了,当然,我只看到基本的用法,高深的等需要的时候再看吧,不然也要忘记的。

      接下来就是awk的介绍,awk有很多经典的书介绍,其中包括《The AWK Programming Language》

      在我看来,awk很多时候跟sed是很相像的,除了需要一些特别的方式进行给出命令,但另外地,最主要的,AWK看起来更像是一个编程语言,比如,AWK里面有两个特殊测例程,它们在任何输入被读取之前和所有输入都被读取之后执行的:BEGIN 与 END。

      所以,一般情况下,把awk脚本看成3个主要部分组成:

    • 处理输入前将做的处理
    • 处理输入过程中将做的处理
    • 处理输入完成后做的处理

      有这些过程,awk看起来似乎更灵活,并且有着类似于基本C语言编程的特性,其实也很容易理解,至于后面的循环、条件、数组还有函数之类的,原理跟C差不太多,就不讲了。

      后面有一章内容,很有意思,叫做《底部抽屉》,开篇讲:本篇要证明并不是一切东西都有其特定的位置。不管怎样安排它们,有些东西看起来就是不合适。这章就是这些情况的一个汇总。考虑抽屉的主题结构,像内衣、袜子和其它每天都要用的东西放在抽屉的上部,而不经常用的东西放在底部抽屉,所有的这些东西看来都是同样可以获得的,但是你必须俯身去底部抽屉找东西。总之,需要更多的努力去得到底部抽屉的东西

      再往后,讲了一些awk的产品以及综合应用,有些应用过于复杂,我想我暂时只能勉强读一读,但有些问题比较简单,我打算尝试练习一下

      总之,《sed&awk》这本书很不错。

  • 相关阅读:
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况
    静态static与方法重载
    编写的一个“手机”的类
    面向对象编程(OOP)————修饰符
    POJO
    设计模式——单例模式
    矩形类 求面积
    面向对象编程(OOP)————类
    面向对象编程(OOP)
    for、if循环直至输入正确
  • 原文地址:https://www.cnblogs.com/moondark/p/2841974.html
Copyright © 2011-2022 走看看