sed & awk 概述

概述

一般情况下,从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

时间: 2024-10-15 13:02:02

sed & awk 概述的相关文章

学习sed,awk最好的路径

编写shell脚本的时候,最常用的便是sed,awk等工具. 如果没有一个好的学习路径,学起来会发现"知其然,不知其所以然".很多别人写的脚本看不懂. 其实,这里可能主要有一个学习路径的欠缺.学习sed之前,应该先了解ed,这个远古时代的文本编辑器,只有对它有了相应了解,才能知道为何那么写.

十七. 正则以及grep ,sed,awk的简单应用

一.正则表达式:/ / grep,sed,awk 都能解释正则表达式 正则表达式:把一些特殊符号组合到一起描述字符和字符串的方法.^ 以什么开头 grep '^root' /etc/passwd$ 以什么结尾 如能登入系统的所有用 grep 'bash$'/etc/passwd. 任意一个字符 grep '^b.n' /etc/passwd 过滤取到bin的.* 所有字符* 代表前面的字符有0个或者无穷个 grep 'b*' /+ 必须用egrep 或 egrep -E 'ab+'表示前面的字符

值得一看的书之《sed&awk(第2版)》

想学习高级sed和awk可以去看看,收益匪浅. --2016年11月19日看完<sed&awk(第2版)> 下载链接:http://down.51cto.com/data/2264410(需要一个下载豆) 值得一看的书之<sed&awk(第2版)>

Linux的文本编辑diff & sed & awk & grep

grep(关键字: 截取) 文本搜集工具, 结合正则表达式非常强大    主要参数 []    -c : 只输出匹配的行    -I : 不区分大小写    -h : 查询多文件时不显示文件名    -l : 查询多文件时, 只输出包含匹配字符的文件名    -n : 显示匹配的行号及行    -v : 显示不包含匹配文本的所有行(我经常用除去grep本身)    基本工作方式: grep 要匹配的内容 文件名, 例如:    grep 'test' d* 显示所有以d开头的文件中包含test的

LINUX 下 find grep sed awk 的常见基本用法特点

LINUX 下 find grep sed awk 的常见基本用法特点 只为让自己具有更高的水准,这就开始了长达6个月的小白进阶路! 这几天学习linux基础命令有点犯蒙,尤其是对文件查找这块.所有我想把一些我觉得常用的实用的参数项总结下来,大神勿喷哈... 不到之处请大家指教,小女子在此谢过了. 一.find:命令用于查找文件系统中指定的文件,其命令格式为: 1.find pathname -options [ -print  -exec  -ok ... ] (1)find 命令的参数: p

linux sed&awk详解

sed sed为文本处理三剑客之一.本身就是一个管道命令,可以将文件进行增加,修改,删除,选取等操作. 格式:sed [-nrefi] [command] "文本字符串" 选项: -r: 支持扩展正则表达式: -n: 静默模式:(sed有个模式空间和保持空间,默认sed会将执行的结果保存到模式空间里面,而模式空间默认情况是输出在屏幕上,加了-n,则阻止将模式空间的内容输出到屏幕上) -f:/path/to/script_file:从指定的文件中读取脚本并运行 -e script1 -e

sed awk 笔记(二)

都说sed awk 运维人员的必备工具.今天起开始整理相关笔记.首先认识一下这两个东西. 共性:使用相同的语法 [address]/pattern/action/flag 都是面向字符流的.从一个文件一次银行的读取输入.并输出到标准输出.即输入驱动的 都是使用正则表达式进行模式匹配的 都允许用户在脚本中指定指令 所以个人认为有几个方面需要突破:语法.正则.编写脚本的思路 [[email protected] test]#今天写的脚本显示洲及所在州的人名 #! /bin/sh awk -F ",&

使用GoAccess分析Nginx日志以及sed/awk手动分析实践

前言 使用Nginx的网站可能会遇到访问流量异常.被友情检测.程序出现Bug等各种突然情况,这时大家的反应想必都是第一时间分析日志,然后发现日志有几十GB之多,又需要按照时间.错误类型或者关键字段检索信息时会不会有种醍醐灌顶.菊花一紧的错觉.文中介绍的方法不管是GoAccess还是sed/awk虽然可以解决一时的问题但未必能够治本,也许ELK(Logstash+ElasticSearch+Kibana)对我们大多数人来说是更合理的集中化日志管理解决方案. 日志固然重要,但努力建设适合业务发展的集

Sed&amp;awk笔记之sed篇(转)

Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" stream-oriented editor. It is stream-oriented because, like many UNIXprograms, input flows through the program and is directed to standard output. Sed本质上是一个编辑器,