sed与awk(一)

Part1

sed和awk有很多共同点,原因之一是它们起源于相同的行编辑器–ed

对于ed,一些基本的逻辑:

  • 每次处理一行。

  • 交互式。通过一些命令同ed程序本身沟通。例如输入打印命令p来显示当前的行。(没有提示符)

  • 默认情况下,一个命令只影响当前的行。

  • 知道“pointer”处于文件中的哪一行很重要。要进行edit,就要将“pointer”移至想要编辑的行;而要
    移到某行,就要指定它的地址(address)。一个address可以由一个行号、一个正则表达式或是“^$”这种
    特殊位置符号组成。

对于ed,一些基本的命令:

  • d,删除 [address]/d

  • s,替换 [address]s/pattern/replacement/flag

Part2

sed是作为特殊目的的编辑器,用于专门执行脚本。sed与ed的不同点在于:

  • 不能交互使用

  • 面向字符流

  • 默认情况下,sed的所有输入都会经过相应处理,并转为标准输出

  • 输入文件本身不发生改变

sed的面向字符流的设定对于应用寻址的影响:
在ed中没有指定address的命令只影响当前行;而sed遍历文件,每次一行,这样每一行都成为当前行,而且每一行都应用这个命令。
结果是sed对文件中的每一行应用了未指定address的命令。也就是说,sed是隐式的全局命令

在ed中,使用寻址扩大命令影响的行数;在sed中,使用寻址限制受命令影响的行数

awk是作为可编程的编辑器而开发的,同sed一样,它也是面向字符流的,并且执行script。
awk延续了寻址的概念,但与sed的不同点在于:

  • awk废弃了行编辑器的命令集。它提供了仿效C语言的程序设计语言,例如,print语句取代p命令

  • 提供了更多的方式来控制编辑器所做的事情。awk提供了表达式、条件、循环..

  • awk拆分每个输入行,并生成可用于脚本处理的独立的单词(字段)。这一点非常独特。

posted @ 2023-03-01 22:53  歪歪ba  阅读(88)  评论(0编辑  收藏  举报