[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 ...
随机推荐
- Codevs 1474 十进制转m进制
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 将十进制数n转换成m进制数 m<=16 n<=100 输 ...
- defrag磁盘整理命令
1: Microsoft 磁盘碎片整理程序 2: 版权所有 (c) 2007 Microsoft Corp. 3: 参数错误. (0x80070057) 4: 描述: 5: 定位并合并本地卷中的碎片文 ...
- 使用记事本+CSC编译程序
本次学习主要阐明.NET开发可以不使用VS,也能像Java一样使用命令窗口.但实际意义不大. 诸位看管不必太留意.(仅供留着给公司新人,树(tree)新(new)风(bee)用.) 1.新建一个文本文 ...
- 【风马一族_git_github】git与github的英文记录
Pull requests Issues Gist 请求 问题 要点 ---------------------------------------------------------------- ...
- HTML5-Geolocation&地图.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 一款jQuery立体感动态下拉导航菜单特效
一款jQuery立体感动态下拉导航菜单特效,鼠标经过,在菜单栏上方下拉出一个背景图片,效果十分不错的一款jquery特效. 对IE6都是兼容的,希望大家好好研究研究. 适用浏览器:IE6.IE7.IE ...
- WordPress 主题开发 - (一) 前言 待翻译
原文出自: http://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tutorial-2nd-edition/ THE TH ...
- cookie文件在电脑的保存位置
在Windows系统上(这里以Win7为例)浏览器的Cookie IE浏览器Cookie数据位于:%APPDATA%\Microsoft\Windows\Cookies\ 目录中的xxx.txt文件 ...
- ESB概述
ESB概念的提出: 企业有大量的异构的业务系统,这些系统之间需要通过web service来交互数据,这样的话可以想象系统直接的交互关系是蜘蛛网状的,是难以维护的.这时候提出了ESB,每个业务系统只需 ...
- jquery冒泡及阻止
javascript, jquery的事件中都存在事件冒泡和事件捕获的问题,下面将两种问题及其解决方案做详细总结. 事件冒泡是一个从子节点向祖先节点冒泡的过程: 事件捕获刚好相反,是从祖先节点到子节点 ...