概述
一般情况下,从grep到sed和awk的学习过程是很自然的。sed和awk是一般用户、程序员和系统管理员们处理文本文件的有力工具。sed的名字来源于其功能,它是个字符流编辑器(stream editor),可以很好地完成对多个文件的一系列编辑工作。awk的名字来源于它的开发人Aho、Weinberger和Kernighan,它是一种程序设计语言,非常适合结构化数据的处理和格式化报表的生成。
sed 与 awk 共性
它们都使用相似的语法来调用。
它们都是面向字符流的,都是从文本文件中一次一行地读取输入,并将输出直接送到标准输出端。
它们都使用正则表达式进行模式匹配。
它们允许用户在脚本中指定指令。
它们有如此多的共同点,原因之是它们都起源于相同的行编辑器—ed。sed和awk的区别在于它们控制所做的工作时所用的指令不同。
sed
sed是作为特殊目的的编辑器而创建的,用于专门执行脚本;与ed不同,它不能交互地使用。sed与ed的主要区别在于它是面向字符流的。默认情况下,到sed的所有输入都会经过相应的处理,并转为标准输出。输入文件本身不发生改变。如果确实想改变输入文件,一般使用shell机制进行输出重定向,当你对所做的编辑工作满意时,用修改后的版本代替最初的文件。
sed的字符流定位对如何应用寻址有重要影响。sed遍历文件,每次一行,这样每一行都成为当前行,而且每一行都应用相同的命令。sed命令是隐式的全局命令
sed中s/regular/complex/ 等价于 ed中 g/regular/s//complex/
理解ed中的当前行寻址与sed中全局行寻址之间的区别是很重要的。在ed中,使用寻址扩大受命令影响的行数;在sed中,使用寻址限制受命令影响的行数。
awk
awk是作为可编程的编辑器而开发的,同sed一样,它也是面向字符流的,并且解释编辑命令的脚本。awk与sed不同的地方是它废弃了行编辑器的命令集。它提供了仿效C语言的程序设计语言,例如,print语句取代p命令;但延续了寻址的概念,例如:
/regular/{print}
原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9185032.html