sed和awk
背景
设计script时,有时候需要修改脚步,如删除或置换某些关键词。这种在script执行过程动态修改文件的做法,称为流编辑。具有流编辑能力的工具,称为流编辑器(stream editor)。sed是这方面的佼佼者,可补bash的不足。另外,script执行时可能要制作报表,呈现各种字段信息。传统上,能和bash完美搭配的,非awk莫属。
正则表达式
正则表达式是组成“样式”的基本语法,而“样式”是运用sed和awk必备的能力。sed和awk相同的运行方式是:只要符合“样式”的数据行,就对它执行指定的“操作”。
有关正则表达式的文章很多。可参见:http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html
sed的用法
sed是一种非交互式的流编辑器,可动态编辑文件。sed的工作模式是,比对每一数据行,若符合样式,就执行指定的操作。
语法
sed '样式命令' 文件
“样式”使用一对//含括,表示寻找之意;也可以指定数据行的范围。
sed并不会更改文件内容。sed的工作方式是读取文件内容,经流编辑之后,把结果显示到标准输出。因此,如果想要存储sed的处理结果,得自行运用转向输出将结果存成其他文件。
各种用法
1 删除某一段范围的数据行:sed '1,4d' datafl 把第1到4行数据删除,剩下的显示出来。d表示删除
2 把含有“样式”的数据行删除:sed '/La/d' datafl 把含有La的行删除,剩下的显示出来。//代表搜索
sed '/[0-9]\{3\}/d' datafl 把含有3位数的行删除,剩下的显示出来。。 正则表达式的应用
3 不含有“样式”的数据行删除:sed '/La/!d' datafl 把不含有La的行删除,剩下的显示出来
4 含有“样式”的数据行显示出来:sed '/La/p' datafl 把含有La的行显示出来。但sed默认也会把不符合的数据行显示出来,所以应这样用:sed -n '/La/p' datafl -n会抑制sed显示
5 取代:sed -n 's/La/Oo/p' datafl s表示选取,第一对//中包括的字符串是搜索的目标,第二对//包括的是置换的字符串。它会把数据行中的La换成Oo 但这样只会更换第一个出现的La,若要全部置换,应使用:sed -n 's/La/Oo/gp' dafl
6 取用符合样式的字符串:sed -n 's/\(La\)/\1Oo/p' datafl 把找到的La存起来,用\1取回来再使用。执行的结果是,如数据行含有La,则第一个出现的La会置换成LaOo,然后显示这些含有La的数据行
7 找到符合样式的数据行后,再进行取代的操作:sed -n '/AAA/s/234/567/p' datafl 找到含AAA的那一行之后,将234换成567 sed -n '/AAA/,/DDD/s/B/567/p' datafl 将含有AAA到含有DDD的那几行,皆将其中的B换成567
例子 :
awk的用法 awk是一种可以处理数据,产生个时候报表的语言。工作方式是读取数据文件,将每一行数据视为一条记录,每笔记录以字段分割符分成若干字段,然后输出各个字段的值。 ps auxw | awk '{print $2}' awk对每一条记录都会套用一个“样式{操作}”,如果符合样式,就执行指定的操作。样式或操作之一,可以省略。如果只有样式,表示要显示符合样式的数据行;如果只有操作,表示对每一数据行都执行该项操作。 以下是awk常用的作用格式: awk “样式” 文件 :把符合样式的数据行显示出来 awk '{操作}' 文件 :对每一行都执行{}中的操作 awk '样式{操作}' 文件 :对符合样式的数据行,执行{}中的操作 awk的用法: 1 awk '/La/' datafl 显示含有La的数据行 2 awk '{print $1,$2}' datafl 显示datafl每一行的第1和第2个字段 3 awk '/La/{print $1,$2}' datafl 将含有关键词La的数据行的第1及第2个字段显示 4 awk -F: '/^ols3/{print $3,$4}' /etc/passwd 使用选项-F 指定:为分隔符,帐号ols3的uid及gid字段显示出来 5 awk -F: 'BEGIN{OFS="+++"}/^ols3/{print $1,$2,$3,$4,$5}' /etc/passwd 以:为分隔符,+++为输出字段分隔符,将帐号ols3的第1-5字段显示 BEGIN{}区域指定awk一开始先做初始化操作,设定OFS="+++"。变了OFS的作用是存储输出字段的分隔符。 #!/bin/bash
if [ $# -ne 1 ] ; then
echo "Usage: $0 on 或 $0 off"
exit 1
fi
OPT=$1
case "$OPT" in
[Oo][Nn]) CMD='YES';;
[Oo][Ff][Ff]) CMD='NO';;
*)
echo '选项错误:使用on或off'
exit 1;;
esac
VSFTP_conf='/etc/vsftpd.conf'
TMP_file="/tmp/tmp.$$"
if [ -e $VSFTP_conf ] ; then
sed s/^.anonymous_enable=.*/anonymous_enable=$CMD/ $VSFTP_conf > $TMP_file
mv -f $TMP_file $VSFTP_conf
echo '设置成功'
else
echo "文件:$VSFTP_conf 不存在"
fi
发表评论
-
Linux Ubuntu 10.10安装Macbuntu 10.10主题
2012-03-31 18:28 1310Macbuntu 是一个用于 Ubuntu 的Mac主题包 ... -
文件传输命令PSCP的使用
2012-03-30 15:41 1796详解使用pscp命令Linux文件上传与下载 PSCP是一个 ... -
Linux 下Mysql备份与恢复
2012-03-29 16:30 825公司项目用到了Mysql的备份与恢复操作 现把脚本程序 ... -
Shell学习(12)文件操作
2011-06-04 21:04 1083文件操作 取得目录内容 ls getconf A ... -
Shell学习(11)文字和图形接口
2011-06-03 15:57 935文字和图形接口 dialog是一种在shell script ... -
Shell学习(10)进程管理和工作控制
2011-06-03 15:53 1306进程管理和工作控制 ps,top,htop命令的使用 ... -
Shell学习(8)转向
2011-06-03 15:42 841转向 文件代码:0,1 ... -
Shell学习(6)函数
2011-06-03 15:08 921函数 Bash调用函数不会 ... -
Shell学习(5)流程控制
2011-06-03 14:54 751流程控制 Bash Shell ... -
Shell学习(4)算术运算
2011-06-03 11:10 1070算术运算 在求值 ... -
Shell学习(3)变量
2011-06-03 11:05 1054变量与字符串 Bash shell没有所谓的“数据形态”, ... -
Shell学习(7)建立函数库
2011-06-01 21:01 1190建立库函数 以获取Ip地址为例1.在一个文件夹下创建库文件m ... -
Linux Shell语法速查表(用C语言语法来作对比)【转】
2011-06-01 13:13 6编写Shell脚本的机会实在是比较少(通常在项目初期搭建开发 ... -
Shell学习(2)Bash Shell中命令行选项/参数处理
2011-05-30 16:48 15670.引言 写程序的时候经常要处理命令行参数,本文描述在 ... -
Shell学习(1)一个简单的Shell
2011-05-23 22:32 976示例代码: #! /bin/bash # This is ... -
Linux基本命令
2011-05-23 20:55 820查看当前SHELL:echo $SHELL查看所有SHELL: ...
相关推荐
学习shell时做的笔记,包含sed,awk,sort,uniq的使用
shell编程,sed,awk,grep等教程
1 Linux主要shell命令详解 2 Linux bash shell脚本语法入门 3 Shell基本命令 4 使用 sed 编辑器
sed与awk 编写脚本利器。
这个是关于shell中的sed和awk介绍的pdf文件,希望大家喜欢!!!
sed与awk使用指南 如果侵犯了您的权利,请您联系我。 本书介绍了一组名字奇特的 UNIX 实用工具 :sed 和 awk 。...sed 和 awk 的学习过程是很自然的,所以本书涵盖了上述 3 个程序,而重点集 中在 sed 和 awk 。
NULL 博文链接:https://ginge.iteye.com/blog/465063
关于Sed以及Awk的使用文档,可以帮助提升脚本语言shell的使用。
This book is about a set of oddly named UNIX utilities, sed and awk. These utilities have many things in common, including the use of regular expressions for pattern matching. Since pattern matching ...
sed和awk是用户、程序员和管理员应用的工具。之所以称为sed是因为它是一个流编辑器(stream editor),用于对许多文件执行一系列的编辑操作。awk是根据它的开发者aho、weinberger和kernighan命名的。awk是一种编程语言...
学习sed和awk不可多得的好资料,高清pdf
awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell awk&sed 详解 shell
说是sed和awk的合集,但是里面也有很多其它的东西.其中就包括了一个windows版的grep.本来也有windows的sed,不过好像不好用.呵呵.希望大家捧场. 里面有很多不错的例子.懒得看文档的人有福了阿.
linux下常用脚本命令集合 : awk sed bash shell Shell范例精解(第4版)
Shell、awk、sed面试题汇总(无答案).doc
本资料涵盖了关于shell教程,sed和awk教程,设备驱动开发,和深入理解内核,多为英文原版资料。
linux shell脚本学习 Bash+Sed+Awk(1).pdf