[shell编程]初识sed和gawk
一.sed编辑器
shell脚本最常见的用途就是处理文本文件,sed和gawk能够极大的简化需要进行的数据处理任务。sed编辑器是流编辑器,跟普通交互式文本编辑器(如vim)不同。流编辑器在编辑器处理数据前基于预先提供的一组规则来编辑数据流。由于命令都是一行一行顺序处理,sed编辑器必须一次就完成对文本的修改,所以比交互式编辑器速度快很多。
使用sed命令的格式:$ sed optioons script file
1.替换标记
s命令帮助我们用斜线间制定的第二个文本字符串代替地一个文本字符串,举一个简单的例子:
# echo This is a dog | sed 's/dog/big dog/'
This is a big dog
在sed命令行上执行多个命令时,用-e选项:
# echo This is a white dog | sed -e 's/white/black/; s/dog/cat/'
This is a black cat
如果有大量sed命令,可以放入一个文件内,用-f选项制定文件,此时不需要用分号:
$ cat script
s/white/black
s/dog/cat
2.使用地址
默认情况下,sed编辑器中使用的命令会作用与文本数据的所有行。如果只想将命令作用于特定某行或者某些行,需要用行寻址。
sed有两种行寻址:行的数字范围;用文本模式过滤出某行。
例如要替换一个文件data中第二行的某个单词,可以这样:
$ sed '2,3s/dog/cat/'
3.删除行
删除命令d经常和指定地址一起使用,若忘记加上一个寻址模式,流中所有文本行都会被删除,比如要删除data文件中第二行:
$ sed '2d' data
需要说明的是,sed编辑器不会修改原文件,删除行只是从sed编辑器的输出中消失了,原始文件仍然包含“被删除的行“。
4.插入和附加文本
插入命令i会在指定行前增加一个新行,追加命令a会在制定行后增加一个新行。举两个例子:
# echo "line 2" | sed 'i\line 1'
line 1
line 2
#
# echo "line 2" | sed 'a\line 1'
line 2
line 1
5.修改行
修改命令c逊于修改数据流中正行文本的内容,跟插入和附加命令一样,必须在sed命令中单独指定新行:
$ sed '2c\This is a black cat' data
6.转换命令
转换命令y是唯一可以处理单个字符的sed编辑器命令。准换命令会进行s1和s2的一对一映射,s1中地一个字符会转换成s2中第一个字符,第二个字符会转换成s2中第二个字符,直到处理玩指定字符。如果s1和s2长度不同,则报错。举个简单例子:
# echo "The number is 12345" | sed 'y/123/789/'
The number is 78945
7.回顾打印
p命令用来打印文本行,=命令用来打印行号,l命令用来列出行。
# echo "This is a test" | sed 'p'
This is a test
This is a test
# echo "This is a test" | sed '='
1
This is a test
命令l可以打印出数据流中的文本和不可打印的ASCII字符,比如制表符的显示是\t。
8.向文件写入读取数据
w命令向文件中写入行:$ sed [指定行]w 文件名
r命令将文件中的数据插入到数据流中:$ sed [指定行]w 文件名
二.gawk程序
gawk程序让流编辑迈上一个新台阶,它提供了一种编程语言而不只是编辑器命令。在gawk中可以定义变量来保存数据;使用算术和字符串操作符来处理数据;使用结构化编程语言,比如if-then来为数据增加逻辑;提取数据文件中的数据元素并将它们按另一顺序或结构重新放置,从而生成格式化报告。
使用gawk命令的格式:$ gawk optioons script file
gawk程序脚本用一队花括号来定义,由于gawk命令行假定脚本是单个文本字符串,所以必须将脚本放到单引号中。
1.使用数据字段变量
$0代表整个文本行,$n代表问本行中的第n个数据字段。
$ cat data
line 1
line 2
line 3
line 4
$
$ gawk '{print $1}' data
line
line
line
line
$
2.使用多个命令
只要在每条命令间加个分号即可。
# echo "This is a dog" | gawk '{$4="cat"; print $0}'
This is a cat
3.在处理数据前运行脚本
BEGIN关键字强制gawk在读取数据前执行它后面制定的程序脚本。
# gawk 'BEGIN{print "Hello world!"}'
Hello world!
4.在处理数据后运行脚本
跟BEGIN关键字类似,END关键字强制gawk在读完数据后执行脚本。
# cat script
BEGIN{
print "The latest list of users and shells"
print "Userid Shell"
print "------ -----"
FS=":"
} {
print $1 " " $7
} END{
print "This concludes the listing"
}
# gawk -f script /etc/passwd
The latest list of users and shells
Userid Shell
------ -----
root /bin/bash
daemon /bin/sh
bin /bin/sh
sys /bin/sh
...
saned /bin/false
**** /bin/bash
This concludes the listing
三.学习资料
1.Common threads: Awk by example, Part 1
2.gawk 手册
[shell编程]初识sed和gawk的更多相关文章
- shell高级-----初识sed和gawk
sed编辑器 sed说明 sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增.删.改.查等操作,支持按行.按字段.按正则匹配文本内容,灵活方便,特别适合于大文件的编辑. 替换 ...
- 《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk
这两个工具能够极大简化需要进行的数据处理任务. 19.1 文本处理 能轻松实现自动格式化.插入.修改或删除文本元素的简单命令行编辑. sed和gawk就具备上述功能 19.1.1 sed编辑器 被称为 ...
- shell学习记录----初识sed和gawk
Linux命令行与shell脚本编程大全中关于sed和gawk的介绍合在一起,而且结构有点乱. 不像之前的命令写的很清楚.所以这次我需要写下来整理一下. 一.sed部分 1.1 sed命令格式如下: ...
- shell编程:sed的选项
sed [参数] [partern/commond] file 标准输出 | sed sed [参数] [partern/commond] -n :使用安静(silent)模式.在一般 sed 的用法 ...
- Shell编程—sed和gawk
1文本处理 1.1sed 编辑器 sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反.在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入.删除或 ...
- shell编程学习笔记之sed编辑器
在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...
- shell编程之sed编辑器&gawk程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...
- shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)
一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...
- Shell编程四剑客包括:find、sed、grep、awk
一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...
随机推荐
- 《UNIX编程艺术》读书笔记
最近这段时间比较忙,利用业余时间看完了这本书.虽然书中讲到的很多例子都是上古文物,我没有用过,不过原理都是相通的,对我的启发很大.比如无所不在的KISS原则,实践中慢慢体会到的SPOT原则,无不产生共 ...
- C#学习笔记(第1周作业)
受队友诱惑,去听了李强的C#公选课,第二天就完成作业了. 作业要求: 1. 小学生加法程序: 2. 能自由设置难度: 3. 对结果进行统计. 第一次写C#程序,遇到不少困难,和队友讨论,百度谷歌一齐上 ...
- 【风马一族_xml】xml语法
xml语法 文档声明 用来声明xml的属性,用来指挥解析引擎如何去解析当前xml 通常一个xml都要包含并且只能包含一个文档声明 xml的文档必须在整个xml的最前面,在文档声明之前不能有任何内容 & ...
- js实现模拟自动点击按钮,并且在10秒倒计时之后疯狂点击
需求来自于csdn问答,可以利用这个原理做秒杀抢单外挂. 代码示例如下: <html> <head> <meta charset="utf-8"/&g ...
- 获取SilverLight.Web项目中路径Uri
方法一: //获取指定要呈现的xaml内容的包活xaml文件Uri var strFullUrl = Application.Current.Host.Source.AbsoluteUri; if ( ...
- MySQL数据库主从复制
一.MySQ主从复制(主库写入数据,从库读取数据) MySql官方下载地址:http://dev.mysql.com/downloads/mysql/ MySql常用命令: 设置密码 UPDATE U ...
- jdbc连接数据库使用sid和service_name的区别
问题描述: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connect ...
- JQuery解析JSon
JsonCreatet.ashx页面 JSonAnalysis.aspx测试页面 一般处理程序中使用Newtonsoft.Json来序列化json 页面使用Jquery 来解析Json数据 Jquer ...
- Python-Day2 Python基础进阶之数据类型
一.数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) Python ...
- jar 命令打war包
假定有一个Web应用:C:\myHomemyHome/WEB-INF/……myHome/files/……myHome/image/……myHome/src/……myHome/index.jsp在命令行 ...