一.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的更多相关文章

  1. shell高级-----初识sed和gawk

    sed编辑器 sed说明 sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增.删.改.查等操作,支持按行.按字段.按正则匹配文本内容,灵活方便,特别适合于大文件的编辑. 替换 ...

  2. 《Linux命令行与shell脚本编程大全》第十九章 初识sed和gawk

    这两个工具能够极大简化需要进行的数据处理任务. 19.1 文本处理 能轻松实现自动格式化.插入.修改或删除文本元素的简单命令行编辑. sed和gawk就具备上述功能 19.1.1 sed编辑器 被称为 ...

  3. shell学习记录----初识sed和gawk

    Linux命令行与shell脚本编程大全中关于sed和gawk的介绍合在一起,而且结构有点乱. 不像之前的命令写的很清楚.所以这次我需要写下来整理一下. 一.sed部分 1.1 sed命令格式如下: ...

  4. shell编程:sed的选项

    sed [参数] [partern/commond] file 标准输出 | sed sed [参数] [partern/commond] -n :使用安静(silent)模式.在一般 sed 的用法 ...

  5. Shell编程—sed和gawk

    1文本处理 1.1sed 编辑器 sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反.在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入.删除或 ...

  6. shell编程学习笔记之sed编辑器

    在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...

  7. shell编程之sed编辑器&gawk程序

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...

  8. shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)

    一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...

  9. Shell编程四剑客包括:find、sed、grep、awk

    一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...

随机推荐

  1. Codevs 2875 RY哥查字典

    时间限制: 1 s  空间限制: 16000 KB  题目等级 : 钻石 Diamond  题目描述 Description RY哥最近新买了一本字典,他十分高兴,因为这上面的单词都十分的和谐,他天天 ...

  2. ECC校验原理以及在Nand Flash中的应用

         本篇文章主要介绍ECC基本原理以及在Nand Flash中的应用,本文记录自己对ECC校验原理的理解和学习. ECC介绍      ECC,全称为Error Correcting Code, ...

  3. MySQL事务机制

    事务机制的特性通常被概括为"ACID原则" A(Atomic) 原子性: 构成一个事务的所有语句应该是一个独立的逻辑单元,要么全部执行成功, 要么一个都不成功, 你不能只执行他们当 ...

  4. Silverlight动画的基本知识、关键帧动画

    基础知识 (一)动画:是快速播放一系列图像(其中每个图像与下一个图像略微不同)给人造成的一种幻觉 (二)动画类型:两类    (1)From/To/By动画:在起始值和结束值之间进行动画处理.     ...

  5. Hadoop上路-04_HBase0.98.0入门

    以下操作在Hadoop分布式集群基础上进行. 一.分布式环境搭建 下载:)验证 3)修改%HBASE%/conf/hbase-env.sh 4)修改$HBASE_HOME/conf/hbase-sit ...

  6. Yii2框架数据库增删改查小结

    User::find()->all();    //返回所有用户数据:User::findOne($id);   //返回 主键 id=1  的一条数据: User::find()->wh ...

  7. SQL Server 读取CSV中的数据

    测试: Script: create table #Test ( Name ), Age int, T ) ) BULK INSERT #Test From 'I:\AAA.csv' with( fi ...

  8. python之类定义

    <python基础教程>第7章说python中的类定义: 1. 要么声明__metaclass__=type 2. 要么继承object. 但是直接定义下类, 也没报错: >> ...

  9. ubuntu14.04 安装matlab r2013a

    神奇的linux. 进入主题:matlab相信是不少工程人员缺少不了的工具,就我所在的通信行业更是如此,matlab的linux版本是和windows版本同步更新, 不过r2012之后只提供64位版本 ...

  10. VBS基础篇 - 常量

    常量:指的是在程序运行过程中其值保持不变的量,它用来保存固定不变的数值,字符串等常数 . 常量的定义:在vbscript中使用使用 Const 指令可以创建名称具有一定含义的字符串型或数值型常量,并给 ...