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拆分每个输入行,并生成可用于脚本处理的独立的单词(字段)。这一点非常独特。