sed与awk(一)

  • sed与awk(一)已关闭评论
  • 91 次浏览
  • A+
所属分类:linux技术
摘要

ed中的替换命令s是 [address]s/pattern/replacement/flagsed和awk都是面向字符流的。都是从文本文件中一次一行地读取输入


ed中的替换命令s是 [address]s/pattern/replacement/flag

sed和awk

  • 都是面向字符流的。都是从文本文件中一次一行地读取输入

  • 它们控制所做的工作时 所用的指令不同

sed的字符流定位对如何应用寻址有重要影响。在ed中没有指定地址的命令
只影响当前行。sed遍历文件,每次一行,这样每一行都成为当前行,而且
每一行都应用这个命令。结果是sed对文件中的每一行应用了没有地址的命令。
也就是说,sed是隐式的全局命令。

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

awk是作为可编程的编辑器而开发的,同sed一样,它也是面向字符流的,
并且解释编辑命令的脚本。awk与sed不同的地方是它废弃了行编辑器的
命令集。它提供了仿效C语言的程序设计语言,例如,print语句取代p命令;
但延续了寻址的概念

大致相同的方式调用sed和awk command [options] script filenames

script指定了要执行的指令。如果在命令行上指定script,假如它包含有
可以由shell解释的空格或任意字符(例如$),那就必须用’’括起来

在sed和awk,每个指令都包括两部分:模式和过程。
模式是由斜杆(/)分隔的正则表达式;过程指定一个或多个将被执行的动作

在sed和awk,过程的内容有很大不同。在sed中,过程由类似于行编辑器
中使用的编辑命令组成,大部分是单个字母。而在awk,过程由程序设计语句
和函数组成。过程必须用大括号括起。

通常情况下,awk将每个输入行解释为一条记录而将那一行上的每个单词
(由空格或制表符分隔)解释为一个字段。一个或多个连续的空格或制表符被看做
一个定界符。awk允许在模式或过程中引用这些字段。$0代表整个输入行。 $1
$2…表示输入行上的每个字段。

sed

  • -e 将下一个参数解释为指令

  • -n 阻止自动输出(所有行),和p连用

  • -f scriptfile

awk

  • -f scriptfile

  • -F 改变字段分隔符

参考资料

sed与awk(第二版)