一.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. [zz] Install VSFTP

    The first two letters of vsftpd stand for "very secure" and the program was built to have ...

  2. GDAL Configure in Visual Studio 2010 for Win7/ GDAL+VisualStudio2010 Win7 配置

    配置环境: OS:Win& *86 Ultimate Edition(EN) VS:Visual Studio 2010(EN) Step1: GDAL源码下载:http://www.gisi ...

  3. 孤岛能源安卓游戏android源码

    孤岛能源是一个以孤岛为背景的模拟动作游戏,游戏中你的角色是 Android 机器人,目的是找到该岛上充满能量的能源造福人类.游戏中,你可以选择按键操作,也可以选择触摸操作.希望你能顺利完成任务.   ...

  4. 网络A、B、C类IP地址的区别

    学网络之前得先要明白几个概念:(起初我也不怎么知道后来就慢慢会了) 1字节=8位,1位就是1个数字,所以1字节等于8个数字. 2的8次方,和二进制11111111转换为十进制并不一回事. 0-127是 ...

  5. ADO.NET笔记——使用连接池

    相关知识: 连接池的意义: 应用程序往往涉及大量的,并发的数据访问操作 数据库服务器能够同时维系的连接数量非常有限.如果某个数据库访问操作不及时关闭连接,就会减少其他调用对数据库访问的机会.因此,一般 ...

  6. WindowsMediaPlayer控件批量添加文件至播放列表

    思路: 1.读取批定路径的目录文件. 2.用List存放. 3.循环List列表添加到播放列表. public void VidieoPlay() { //WindowsMediaPlayer1.ui ...

  7. PHP 图片文件上传代码

    通过 PHP,可以把文件上传到服务器.里面加入一些图片的判断,如果不加判断文件的类型就可以上传任意格式的文件. 为了网站的安全,肯定不让上传php文件,如果有人进入你的后台,上传了一个php文件,你的 ...

  8. 分享:JS比较两个日期大小

    发布:thatboy   来源:Net     [大 中 小] 本文介绍下,在javascript代码中,比较两个日期大小的方法,有需要的朋友参考下. 转自:http://www.jbxue.com/ ...

  9. FAN_int2ExcelColChar functions

    static void FAN_int2ExcelColChar(Args _args) { Dialog dlg = new dialog("please enter int number ...

  10. R简易入门(二)

    本文内容来源:https://www.dataquest.io/mission/128/working-with-data-frames 本文摘要:简单介绍一下用R处理数据   原始数据展示(这是一份 ...